Jun 042006
 

自宅内のサーバ間はホストベース認証にしてみました。
正直、ここに書いてあることを読むより

を見ていただいたほうがよっぽどわかりやすく、かつ有益だと思います。

環境

  • サーバ(接続先) : server.example.jp
  • クライアント(接続元) : client.example.jp

上記ホストは/etc/hostsもしくはDNSに登録済みで正引き逆引きともに名前解決可能であることとします。

サーバでの準備

/etc/ssh/sshd_configの設定変更

Protocol 2のみ使用することにしてますので以下の設定を加えます。Protocol 1も使う場合は別の設定が必要ですが、今更使うことは推奨されませんので割愛します。

ホストベース認証を有効にします。
HostbasedAuthentication yes

~/.ssh/known_hostsを信用しません。/etc/ssh/ssh_known_hostsに公開鍵を追加したホストのみホストベース認証を許可します。
IgnoreUserKnownHosts yes

~/.rhostsや~/.shostsを信用しません。/etc/hosts.equivなどのシステムファイルに記述されたホストのみ接続を許可します。
IgnoreRhosts yes

ただしrootユーザの場合は/etc/hosts.equivを見にいってくれません。rootでもホストベース認証したい場合、こちらはnoのままにしておいて~/.rhostsや~/.shostsを有効にする必要があります(auth-rhosts.cで判定しているっぽい)。

クライアントの公開鍵を登録

接続元となるホストからホスト公開鍵をもってきて、/etc/ssh/ssh_known_hostsに登録します。

# ssh-keyscan -t rsa client.example.jp >> /etc/ssh/ssh_known_hosts

IgnoreUserKnownHosts yesにより、ホストベース認証時はユーザの~/.ssh/known_hostsは無視されますので、こちらへの公開鍵登録が必須となります。

接続許可ホスト限定

/etc/ssh/shosts.equivに許可ホストのエントリを追加します(rootの場合は~/.shosts)。

# echo client.example.jp >> /etc/ssh/shosts.equiv

IgnoreRhosts yesにより、ユーザの~/.rhostsや~/.shostsは無視されますので、こちらや/etc/hosts.equiv等へのエントリ追加が必須となります。

クライアントでの準備

この状態で一端接続してみます。

$ ssh -o HostbasedAuthentication=yes server.example.jp
ssh-keysign not enabled in /etc/ssh/ssh_config
ssh_keysign: no reply
key_sign failed
Enter passphrase for key '/home/foobar/.ssh/id_dsa':

という具合に接続元ホストの/etc/ssh/ssh_configを変更が必要といわれます。またHostbasedAuthentication=yesをいちいち指定するのも面倒ですので、これらの設定を/etc/ssh/ssh_configに追加します。

Host *
  HostbasedAuthentication yes
  EnableSSHKeysign yes

■2009-04-04追記
ssh-keyscanで取り込んだ公開鍵が実際の公開鍵(/etc/ssh/ssh_host_rsa_key.pub等)と異なっていて接続できない場合あり。
原因は追求していないが公開鍵ファイルを直接登録して凌いだ。

Sorry, the comment form is closed at this time.