|
|
秘密鍵・公開鍵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ごった煮版です。
秘密鍵の登録(TeraTermの場合)今回はTeraTerm Pro with TTSSH2を使用しています。 (1) TeraTermを起動 接続先を入力し、サービス欄でSSHにチェックを入れて「OK」ボタンを押下します。 秘密鍵の登録(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 これで設定は完了です:-) |
|
