例えば「他のマシンへ root ユーザとして ssh で login し、rsync でバックアップを取る」などの場合に利用したりします。
HostBased 認証の設定ですが、ssh プロトコルバージョン2を利用する場合、基本的には、「login される側(サーバ)」では、
- /etc/ssh/sshd_config で HostbasedAuthentication yes に設定
- /etc/ssh/ssh_known_hosts へクライアントホストの公開鍵を登録
- /etc/ssh/shosts.equiv へクライアントのホスト名(またはIPAddress)を記載
EnableSSHKeysign yes
Host foo.example.com
HostbasedAuthentication yes
PreferredAuthentications hostbased,publickey,password
と書きます(2011/05/02: 上記EnableSSHKeysignの位置を修正しました)。ssh プロトコルバージョン2 を使った HostBased 認証を有効にする場合、クライアント側 ssh_config の EnableSSHKeysign が1つのポイントです。この指示により、ssh コマンドが ssh-keysign コマンド経由でローカルホストキーへアクセスすることが可能になります。
ただし、ssh-keysign が適切にホストキーを読み込むためには、ssh-keysign が root へ setuid されている必要があります。ここが第2のポイントです。
少なくとも FreeBSD 6.4 ならびに 7.2 では、デフォルトでは、このコマンドは setuid されていません。すなわち、sshd/ssh 側の設定を適切に行っても、上記 FreeBSD をクライアントにした場合、デフォルトのままでは、HostBased 認証を使って login 出来ない、ということになります。
対応は簡単で、該当コマンドを setuid するだけです。
# chmod u+s /usr/libexec/ssh-keysign
# ls -l /usr/libexec/ssh-keysign
-r-sr-xr-x 1 root wheel 23308 Nov 26 2008 /usr/libexec/ssh-keysign
これで上記FreeBSD でも HostBased 認証で login 出来るようになります。このあたりは、ssh(1) の FILES や、ssh-keysign(8)のDESCRIPTIONで丁寧に言及されているのですが、一部 Linux では ssh-keysign がデフォルトで root へ setuid されていたため、今まで気がつきませんでした。
もし FreeBSD で HostBased認証がうまくいかない、とハマった場合には、/usr/libexec/ssh-keysign の permission を確認してみてください。
0 件のコメント:
コメントを投稿