SSHの公開鍵認証設定
[概 要]
OpenSSHでは複数のユーザ認証方式がサポートされており、デフォルトの状態では、「パスワード認証」が可能となっています。
本ドキュメントでは、それらのユーザ認証方式のうち、「公開鍵認証」の設定方法について説明します。
なお、本ドキュメントでは、sshサーバ、クライアントとも、Asianux Server 3を使用しています。
[注意事項]
本ドキュメントは、各ソフトウェア開発元の情報およびマニュアル等を元にした参考情報です。
本ドキュメントの内容は、予告なしに変更される場合があります。
本ドキュメントは、限られた評価環境における検証結果をもとに作成しており、全ての環境での動作を保証するものではありません。
本ドキュメントの内容に基づき、導入、設定、運用を行なったことにより損害が生じた場合でも、弊社はその損害についての責任を負いません。あくまでお客様のご判断にてご使用ください。
[公開鍵認証とは]
公開鍵認証とは、秘密鍵と公開鍵という鍵ペアを使用する認証方式です。公開鍵認証では、パスワードを入力しないため、パスワードがネットワーク上を流れることがありません。そのため、パスワードの盗難や推測などの攻撃を防ぐことができ、より安全な通信を実現します。
[確認環境]
本ドキュメントの評価環境は以下のとおりです。
sshサーバ
使用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
sshログインユーザ:userA
sshクライアント
使用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
公開鍵認証設定ユーザ:userA
[公開鍵認証の流れ]
①アクセスするユーザ名をサーバへ送信
②クライアントに向けて、あらかじめ登録されたユーザの 公開鍵で暗号化したメッセージを送信
③ペアとなる秘密鍵でメッセージを復号化し、そのハッシュ値をサーバへ送信
④ハッシュ値を比較し、メッセージが正しく復号化されていれば、クライアントの秘密鍵所有が証明され、ログイン許可
※ユーザの秘密鍵は、それ自体が暗号化されており、秘密鍵を復号化するためにパスフレーズを使用します。
[設定方法]
■ クライアント側設定
※コマンドライン行頭の $ は、ユーザ(本ドキュメントではuserA)のコマンドプロンプトをあらわします。
1.ssh公開鍵と秘密鍵を作成します。(以下の例ではdsa方式の鍵ペアを作成しています。)
※本ドキュメントでは鍵ペアの保存ディレクトリはデフォルトのままで設定しています。
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/userA/.ssh/id_dsa): ←そのままEnter
Created directory '/home/userA/.ssh'.
Enter passphrase (empty for no passphrase): ←秘密鍵用のパスフレーズを入力
Enter same passphrase again: ←再度パスフレーズを入力
Your identification has been saved in /home/userA/.ssh/id_dsa.
Your public key has been saved in /home/userA/.ssh/id_dsa.pub.
The key fingerprint is:
97:3a:59:0c:28:0d:6f:c9:6e:dd:9b:e8:42:cd:4b:6a userA@client.example.com
2.作成された鍵ペアは、ユーザのホームディレクトリ以下の .ssh ディレクトリに保存されます。
公開鍵(id_dsa.pub)と秘密鍵(id_dsa)が作成されたことを確認します。
$ ls ~/.ssh
id_dsa id_dsa.pub
3.sshサーバへ公開鍵(id_dsa.pub)をコピーします。
以下の例では、クライアント側でscpコマンドを使用し、sshサーバの/tmpディレクトリへコピーしています。
※sshサーバ側でsshサービスが起動している必要があります。sshサービスの起動方法は、「sshサーバ側設定」手順1をご参照ください。
$ scp ~/.ssh/id_dsa.pub server.example.com:/tmp
4.~/.sshディレクトリと、秘密鍵を保存したid_dsaファイルのパーミッションを、それぞれ700と600に設定します。
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_dsa
■ sshサーバ側設定
1.sshサービスが起動していない場合は起動します。
(先頭の#はrootユーザのコマンドプロンプトをあらわします)
# service sshd start
次回以降、OS起動時に自動でsshサービスを起動させる場合には、以下のコマンドを実行します。
# chkconfig sshd on
2.公開鍵認証を使用するユーザ(本ドキュメントではuserA)のホームディレクトリに.sshディレクトリが無い場合は作成します。(以下の作業はuserAで行います。)
$ mkdir ~/.ssh
3.ユーザの~/.sshディレクトリのパーミッションを700に変更します。
$ chmod 700 ~/.ssh
4.クライアントからコピーした公開鍵を、ユーザの~/.ssh/authorized_keysファイルへ追加します。
以下の例では、前述のクライアント側設定で、/tmpに保存した公開鍵(id_dsa.pub)を追加しています。(authorized_keysファイルが存在していない場合でも新規作成されます)
$ cat /tmp/id_dsa.pub >> ~/.ssh/authorized_keys
5.authorized_keysファイルのパーミッションを600に変更します。
$ chmod 600 ~/.ssh/authorized_keys
■ 接続確認
公開鍵認証の設定を行ったユーザで、sshコマンドを実行すると、秘密鍵のパスフレーズを要求されます。(公開鍵認証が使われている)
パスフレーズを入力し、ログインできることを確認します。
(以下の表示は、サーバに初めて接続する際の、サーバのホスト公開鍵登録時のメッセージを含んでいます。2回目以降の接続の際には、パスフレーズの入力行のみが表示されます。)
$ ssh userA@server.example.com
The authenticity of host 'server.example.com (10.1.1.100)' can't be established.
RSA key fingerprint is 71:8f:ab:81:75:61:e7:9c:44:79:d8:e3:28:dd:72:78.
Are you sure you want to continue connecting (yes/no)? yes ←yesを入力
Warning: Permanently added 'server.example.com,10.1.1.100' (RSA) to the list of known hosts.
Enter passphrase for key '/home/test/.ssh/id_dsa': ←パスフレーズを入力
[更新履歴]
・2008年 3月 5日 新規作成