ssh2でホストベース認証
sshのホストベース認証を利用する為には、サーバとクライアントの両方でホストベース認証(HostbasedAuthentication)をyesにし、互いのホストキーを /etc/ssh/ssh_known_hosts2 に追加する(debian/lennyの場合)。また、サーバ側は /etc/hosts.equiv に クライアントを追加し、クライアント側ではEnableSSHKeysign を yes にする。
sshには様々な認証がある。そのなかの一つにホストベース認証がある。ホストベース認証を利用すると、同一ユーザが存在するホスト間で、ユーザの認証を省くことが可能になる。クラスタ等の大量ホスト上に同一のユーザが存在する場合、個々のホストどうしでホストベース認証をしておけば、ユーザ認証をせずにタスクをdispatchできる。
各ユーザは個々のホストでユーザネームが同一である必要があるが、uidは異なっていてもログインできる。
ホストベース認証を利用する為には、サーバとクライアントのどちらにも設定が必要になる。以下はdebian/lenny を使った場合の例である。
クライアント:
- 以下を設定をssh_configに追加する。
HostbasedAuthentication yes
EnableSSHKeysign yes - サーバのホストキーをimportする。ssh-keyscan を使うと便利。
# ssh-keyscan server1,server2,.. > /etc/ssh/ssh_known_hosts2
サーバ:
- 以下を設定をssh_configに追加する。
HostbasedAuthentication yes - /etc/hosts.equiv にクライアントのホスト名(またはIP address)を書く。
- クライアントのホストキーをimportする。クライアント側でもsshdが動いてる場合は、クライアントの場合と同様に、ssh-keyscan が利用できる。クライアントでssh-server が動いていない場合は、
- ホストキーを生成する。ホストキーはssh-keygenで以下の様に生成。既にある場合は新たに作る必要はない。
# ssh-keygen -N ” -t rsa -f /etc/ssh/ssh_host_rsa_key - ssh_host_rsa_key.pub をサーバにコピーし、ssh_known_hosts2 に追加する。追加時に、クライアントのホスト名(やIP address)をパブリックキーの先頭に追加する。
# (echo -n client; cat ssh_host_rsa_key.pub) > /etc/ssh/ssh_known_hosts2
- ホストキーを生成する。ホストキーはssh-keygenで以下の様に生成。既にある場合は新たに作る必要はない。
クライアント側では、サーバのホストキーを/etc/ssh/ssh_known_hosts2 に保存せずに、個々のユーザの ~/.ssh/known_hosts に動的に保存させることも出来る。この場合、事前にサーバのホストキーを保存する必要はない。
逆に、サーバ側はユーザの known_hosts を無視することも出来る。これはsshd_configでIgnoreUserKnownHostsをyesに設定すれば良い。この設定をした場合は、クライアント側で /etc/ssh/ssh_known_hosts2 が存在しない場合には、ホストベース認証は行われず、別の認証に切り替わる。
references:
- ssh_config(5)
- sshd_config(5)
- hosts_equiv(5)