SSHのホストベース認証設定
[概 要]
(本ドキュメントでは、sshサーバ、クライアントとも、Asianux Server 3を使用しています。)
[注意事項]
本ドキュメントは、各ソフトウェア開発元の情報およびマニュアル等を元にした参考情報です。
本ドキュメントの内容は、予告なしに変更される場合があります。
本ドキュメントは、限られた評価環境における検証結果をもとに作成しており、全ての環境での動作を保証するものではありません。
本ドキュメントの内容に基づき、導入、設定、運用を行なったことにより損害が生じた場合でも、弊社はその損害についての責任を負いません。あくまでお客様のご判断にてご使用ください。
使用OS :Asianux Server 3
ホスト名:server.example.com
IPアドレス:10.1.1.100
関連パッケージバージョン:
openssh-4.3p2-16.1AX
openssh-server-4.3p2-16.1AX
openssl-0.9.8b-8.3
使用OS : Asianux Server 3
ホスト名:client.example.com
IPアドレス : 10.1.1.200
関連パッケージバージョン:
openssh-4.3p2-16.1AX
openssh-clients-4.3p2-16.1AX
openssl-0.9.8b-8.3
■ サーバ側設定
1.sshサービスが起動していない場合は起動します。
(先頭の#はrootユーザのコマンドプロンプトをあらわします)
# service sshd start
次回以降、OS起動時に自動でsshサービスを起動させる場合には、以下のコマンドを実行します。
# chkconfig sshd on
2.クライアントのホスト公開鍵を、sshサーバの/etc/ssh/ssh_known_hostsファイルに登録します。
(1)sshサーバに、クライアントのホスト公開鍵をコピーしておきます。
以下の例では、クライアント側でscpコマンドを使用し、sshサーバの/tmpディレクトリへコピーしています。
# scp /etc/ssh/ssh_host_rsa_key.pub 10.1.1.77:/tmp/
(補足1)
手順(1)の前に、クライアントの/etc/sshディレクトリに秘密鍵・公開鍵ペアが存在しない場合は、クライアント上で鍵ペアを生成します。(鍵ペアが既に存在する場合は不要です。)
以下の例ではRSA方式の鍵ペアを生成しています。コマンドはクライアント上で実行してください。
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -C '' -N ''
(2)コピーしたホスト公開鍵を/etc/ssh/ssh_known_hostsファイルに登録します。
※クライアントホスト名の後ろには半角スペースが1つ入ります。
# ( echo -n 'クライアントのホスト名 ' ; cat /tmp/ssh_host_rsa_key.pub ) >> /etc/ssh/ssh_known_hosts
例)クライアントのホスト名 client.example.comの場合
# ( echo -n 'client.example.com ' ; cat /tmp/ssh_host_rsa_key.pub ) >> /etc/ssh/ssh_known_hosts
(3)サーバの/etc/ssh/ssh_known_hostsファイルに、クライアントのホスト公開鍵が書き込まれていることを確認します。
# cat ssh_known_hosts
client.example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsXDC…略
....略
(補足2)
手順(1)~(2)のかわりに、ssh-keyscanコマンドを使用して、直接ホストの公開鍵を収集することも可能です。ssh-keyscanは、sshクライアントがSecure Shell デーモン(sshd)が稼動するホストの公開鍵を収集するためのコマンドであり、openssh-clientパッケージに含まれています。
本ドキュメントの環境の場合は、クライアント側(10.1.1.200)でsshdを起動し、sshサーバ側(10.1.1.100)で下記のコマンドを実行することで、sshサーバにクライアントのホスト公開鍵を登録することができます。
# ssh-keyscan -t rsa client.example.com >> /etc/ssh/ssh_known_hosts
2./etc/ssh/shosts.equivファイルを作成します。
shosts.equivファイルには、ホストベース認証を許可するホスト名とユーザを記述します。
DNSを使用している場合、このファイルにはIPアドレスではなくホスト名を記述します。
ホスト名 ユーザ名
例1)client.example.com の(rootを除く)すべてのユーザにホストベース認証を許可する。
client.example.com
例2)client.example.com の user1ユーザにホストベース認証を許可する。
client.example.com user1
3./etc/ssh/sshd_configを編集します。
ホストベース認証を使用するためには"HostbasedAuthentication”をyesにしてください。
なお、以下は最低限必要な設定です。必要に応じで他の設定を変更してください。
sshd_configの設定項目については、オンラインマニュアル(man sshd_config)をご参照ください。
HostbasedAuthentication yes
4.sshサーバを再起動します。
# service sshd restart
■ クライアント側設定
/etc/ssh/ssh_configを編集します。
"EnableSSHKeysign”はホストベース認証で使用する ssh の補助プログラムです。
なお、以下は最低限必要な設定です。必要に応じで他の設定を変更してください。
ssh_configの設定項目については、オンラインマニュアル(man ssh_config)をご参照ください。
EnableSSHKeysign yes
HostbasedAuthentication yes
■ 接続確認
サーバ上のshosts.equivファイルに登録したユーザで、sshコマンドを実行し、パスワード無しでログインできることを確認します。
$ ssh server.example.com
クライアント側とサーバ側でユーザ名が異なる場合や、rootユーザで接続したい場合、サーバ側のユーザのホームディレクトリに、.shosts ファイルを作成します。
■ サーバ側設定
1.[設定方法-1]と同様に1.クライアントのホスト公開鍵を、sshサーバに登録してください。
2.ログインを許可するユーザのホームディレクトリに、.shostsファイルを作成します。
以下の例では、クライアント側のuserAから、sshサーバ側のuserBとしてログインするために、userBのホームディレクトリの .shostsファイルに、userAを記述しています。
client.example.com userA
3.~/.shosts のパーミッションを変更します。
$ chmod 600 ~/.shosts
4./etc/ssh/sshd_configを編集します。
~/.shostsファイルを使用する場合は、"IgnoreRhosts”を"no”に設定します。
PermitRootLogin yes ←rootによるログインを許可する場合にはyesにします。
HostbasedAuthentication yes
IgnoreRhosts no
5.sshサーバを再起動します。
# service sshd restart
■ クライアント側
/etc/ssh/ssh_configを編集します。最低限必要な設定は[設定方法-1]と同じです。
EnableSSHKeysign yes
HostbasedAuthentication yes
■ 接続確認
sshサーバ上のユーザの~/.shostsファイルに登録したユーザで、sshコマンドを実行し、パスワード無しでログインできることを確認します。
以下の例では、クライアントのuserAユーザで、sshサーバ(server.example.com)にuserBとしてログインしています。
$ ssh userB@server.example.com