秘密鍵・公開鍵SSH接続
秘密鍵・公開鍵(鍵交換方式)使ったSSH接続の設定方法。
秘密鍵・公開鍵認証
SSHによって通信経路を暗号化したとしても、何らかの原因(ブルートフォース攻撃等)でパスワードが第3者に漏れてしまったらせっかくの暗号化通信も意味がありません。
※ならばパスワードを推測できないぐらい複雑なものにすればよいと思うかもしれませんがそんな難しいパスワードは、ユーザ自身が覚えておくことも難しくて結局紙に書いたりしてそこからパスワードがもれてしまう・・・
なので、セキュリティレベルをもう一段強固にするために「鍵認証方式」を使用したSSH接続を実装したいと思います。
この方式ですと、万が一パスワードが第3者に漏れたとしても鍵を持っていないホストからの接続は出来なくなくなります。
※逆にいうと、正規のユーザも鍵が保存されているホストからのみしか接続できなくなるので利便性は下がります。
鍵作成
鍵を作成したいユーザでログイン後「ssh-keygen」コマンドを使用して秘密鍵と公開鍵を作成します。
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/tamohiko/.ssh/id_rsa): Created directory '/home/tamohiko/.ssh'. Enter passphrase (empty for no passphrase): (SSHログイン用のパスワードを入力) Enter same passphrase again:(SSHログイン用のパスワードを入力) Your identification has been saved in /home/tamohiko/.ssh/id_rsa. Your public key has been saved in /home/tamohiko/.ssh/id_rsa.pub. The key fingerprint is: 1d:cc:af:2d:3c:82:6a:97:6e:c5:af:18:7b:b6:ff:f7 tamohiko@sun.server-memo.net
これで、秘密鍵と公開鍵がユーザホームディレクトリ内の.sshディレクトリ内に作成されます。
秘密鍵
/home/tamohiko/.ssh/id_rsa.
公開鍵
/home/tamohiko/.ssh/id_rsa.pub
公開鍵の登録
作成された公開鍵からauthorized_keysを作成します。
authorized_keysが無い場合
$ cd ~/.ssh $ mv id_rsa.pub authorized_keys $ chmod 600 authorized_keys
既にauthorized_keysがある場合
$ cat id_dsa.pub >> authorized_keys
秘密鍵を接続元クライアントへ
id_rsa(秘密鍵)を何らかの方法でクライアントに持っていきます。
セキュリティを考えると、フロッピーディスクとかUSBメモリなんかでクライアントに持っていくのが良いでしょう。
sftpやscpでもよいかもしれません。
秘密鍵の登録(puttyの場合)
今回使用したSSHクライアントは、蛭子屋本舗さんで配布しているPuttyごった煮版です。
ここでは、サーバより持ってきたid_rsa(秘密鍵)をPuttyへ登録する手順です。
Putty用秘密鍵の生成
(1) puttygen.exeの起動 Puttyge.exeアイコンをクリックして起動します (2) 秘密鍵の読込み 「ファイル」-「秘密鍵の読込み」を選択します。サーバより持ってきたid_rsaを選択します。 (その際ファイルの種類はすべてのファイルを選択します。)
(3) パスフレーズ入力 「パスフレーズの入力」ウインドウが表示されますので、 サーバで鍵を作成した際に設定したパスワードを入力します。
(4) 鍵インポートの確認 「鍵のインポートに成功しました」といウィンドウが表示されますので 「OK」ボタンを押下します。
(5) 秘密鍵の保存 「秘密鍵の保存」ボタンを押下して、秘密鍵の保存を行います。
「秘密鍵の保存」画面が表示されるので、適当な場所に分かりやすい名前を付けて PuTTY秘密鍵ファイルをを保存してください。
以上でPuttyに登録するための秘密鍵生成作業は完了です。
Puttyへ秘密鍵の登録
(1) putty起動 putty.exeを起動します。 (2) サーバ接続データの読込 PuTTY設定ウィンドウが表示されますので、既存のサーバ接続用データを読み込みます。 接続用の設定がなければ、新規に作成してください。(3) putty用秘密鍵の読込み カテゴリ欄より「SSH」-「認証」を選択し、 「認証のためのプライベートキーファイル欄」の「参照」ボタンを押下します。
「秘密鍵ファイルの選択」画面が表示されるので、 putty-gen.exeで作成した、秘密鍵を選択します。
(4) 秘密鍵登録完了
(5) puttyの設定保存 カテゴリ欄よりセッションを選択し、「保存」ボタンを押下して設定を保存します。
以上で、Puttyへの秘密鍵登録作業は完了となります。
秘密鍵の登録(TeraTermの場合)
今回はTeraTerm Pro with TTSSH2を使用しています。
(1) TeraTermを起動 接続先を入力し、サービス欄でSSHにチェックを入れて「OK」ボタンを押下します。(2)SSH認証設定 「SSH認証」ウィンドウが表示されるので、「ユーザ名」「パスフレーズ」を入力し、 「RSA/DSA鍵を使う」にチェックを入れて、「秘密鍵」ボタンを押下します。
(3)秘密鍵の登録 「RSA/DSA秘密鍵ファイルの選択」画面が表示されるので、サーバより持ってきた秘密鍵を選択します。
秘密鍵の登録(linuxの場合)
※今回は~/.ssh に秘密鍵を保存するものとします。$ cd ~./ssh $ ls -la -rw-r--r-- 1 tamo tamo 224 7月 6 16:00 known_hosts -rw-r--r-- 1 tamo tamo 952 7月 6 16:03 id_rsa <--接続先より持ってきた秘密鍵(1) パーミッションの変更 サーバより持ってきた秘密鍵のパーミッションを600に変更します。$ cd ~/.ssh $ mv id_rsa www_rsa <--どのサーバの鍵なのか、分りやすいように名前を変更 $ chmod 600 www_rsa(2) 接続方法 秘密鍵を使用してssh接続するにはsshの「-i」オプションを使用します。$ ssh -i ~/.ssh/www_rsa tamohiko@192.168.0.1 Enter passphrase for key '/root/.ssh/www_rsa': Last login: Sun Jun 3 22:59:03 2007 from 192.168.0.100
sshd設定変更
鍵を持っているクライアントからのみSSH接続を許可するという設定を、 sshdの設定ファイルである「/etc/ssh/sshd_config」に設定していきます。
/etc/ssh/sshd_configの編集
ここからはrootユーザで作業します。
$ su - # cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_yyymmdd # vi /etc/ssh/sshd_config
変更項目
変更前#RSAAuthentication yes #PubkeyAuthentication yes #AuthorizedKeysFile .ssh/authorized_keys #PasswordAuthentication yes変更後
コメントをはずして、「PasswordAuthentication」の項目を「no」に変更します。
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no <-- noへ変更します
configのテスト
「/usr/sbin/sshd -t」コマンドを実行すると設定ファイルの書式に間違いが無いか確認してくれます。
「/etc/sshd/sshd_config」の書式に問題がなければ何も表示されません。
(書式をテストするだけで、設定値等はテストしてくれません。)
表示例
# /usr/sbin/sshd -t書式に間違えがあれば以下のように、間違っている箇所が表示されます。
# /usr/sbin/sshd -t /etc/ssh/sshd_config line 64: Bad yes/no argument: No /etc/ssh/sshd_config: line 91: Bad configuration option: UesPAM /etc/ssh/sshd_config: terminating, 1 bad configuration options
設定反映
設定が完了しましたら、sshdを再起動することで設定を反映させます。
ssh再起動
現在の通信を切断しないまま行います。
(出来れば、コンソールで操作できる環境で行ったほうがよい)
# /etc/init.d/sshd restart
動作確認
設定変更が完了しましたら、実際に鍵を持っているクライアントと持っていないクライアントよりログインしてみて、動作確認を行って見ます。
鍵を持っているクライアントからのログイン
今回はwindowsXPより「putty」というsshクライアント使用して動作確認をしてみました。
login as: tamohiko Authenticating with public key "imported-openssh-key" Passphrase for key "imported-openssh-key": Last login: Tue May 22 15:54:09 2007 from 192.168.85.1
無事ログインすることが出来ました:-p
ちなみに、/var/log/secure ログには以下のようにログが残ります。
May 22 08:10:28 sun sshd[11934]: Accepted publickey for tamohiko from 192.168.85.1 port 2149 ssh2
鍵を持っていないクライアントからのログイン
鍵を持っていないクライアントからログインしてみると、ログイン出来ないことが確認できます。
login as: tamohiko
こちらの場合は、以下のように/var/log/secureへログが残ります。
May 22 08:11:42 sun sshd[12023]: Received disconnect from 192.168.85.1: 11: No supported authentication methods available
これで設定は完了です:-)
サーバより持ってきたid_rsaを選択します。
(その際ファイルの種類はすべてのファイルを選択します。)
(3) パスフレーズ入力
「パスフレーズの入力」ウインドウが表示されますので、
サーバで鍵を作成した際に設定したパスワードを入力します。
(4) 鍵インポートの確認
「鍵のインポートに成功しました」といウィンドウが表示されますので
「OK」ボタンを押下します。
(5) 秘密鍵の保存
「秘密鍵の保存」ボタンを押下して、秘密鍵の保存を行います。
「秘密鍵の保存」画面が表示されるので、適当な場所に分かりやすい名前を付けて
PuTTY秘密鍵ファイルをを保存してください。
以上でPuttyに登録するための秘密鍵生成作業は完了です。
(3) putty用秘密鍵の読込み
カテゴリ欄より「SSH」-「認証」を選択し、
「認証のためのプライベートキーファイル欄」の「参照」ボタンを押下します。
「秘密鍵ファイルの選択」画面が表示されるので、
putty-gen.exeで作成した、秘密鍵を選択します。
(4) 秘密鍵登録完了
(5) puttyの設定保存
カテゴリ欄よりセッションを選択し、「保存」ボタンを押下して設定を保存します。
以上で、Puttyへの秘密鍵登録作業は完了となります。
(2)SSH認証設定
「SSH認証」ウィンドウが表示されるので、「ユーザ名」「パスフレーズ」を入力し、
「RSA/DSA鍵を使う」にチェックを入れて、「秘密鍵」ボタンを押下します。
(3)秘密鍵の登録
「RSA/DSA秘密鍵ファイルの選択」画面が表示されるので、サーバより持ってきた秘密鍵を選択します。
