自分サーバの構築その13:sshで公開鍵認証でログインする
VMware上にCentOSをインストールしたが、インストール後の通常の作業は、tereterm/ssh経由でパスワードログインして作業している。毎回パスワードを入力するのが手間なのと、よりセキュアな環境を構築する、という意味で、sshを公開鍵方式で使用する環境を構築してみる。
参考にしたのは、この辺。
「ITmedia エンタープライズ : Linux Tips「ノンパスワードでログインしたい sshプロトコルバージョン1編」」
http://www.itmedia.co.jp/help/tips/linux/l0402.html
「ITmedia エンタープライズ : Linux Tips「ノンパスワードでログインしたい sshプロトコルバージョン2編」」
http://www.itmedia.co.jp/help/tips/linux/l0404.html
「はじめての自宅サーバー構築 - SSHサーバの構築(OpenSSH) -」
http://kajuhome.com/openssh.shtml#n05
前提としては、Linuxサーバが2台。
この2台を使用して、localからremoteへ、公開鍵認証でsshログインできる環境をセットアップしてみる。
まずは、local側でssh-keygenコマンドを使用して、SSH2の鍵のペアを作成する
[hanzawa@local]$ whoami ---> 対象のユーザは「hanzawa」ユーザ
hanzawa
[hanzawa@local]$ ssh-keygen -t rsa ---> RSA暗号を指定。DSA暗号も指定できる
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hanzawa/.ssh/id_rsa): --->何も入力しないでEnter
Enter passphrase (empty for no passphrase): --->パスフレーズを入力
Enter same passphrase again: --->再入力
Your identification has been saved in /home/hanzawa/.ssh/id_rsa.
Your public key has been saved in /home/hanzawa/.ssh/id_rsa.pub.
The key fingerprint is:
e0:e0:b8:ea:78:74:b4:26:fd:xx:xx:xx:xx:xx:xx:xx hanzawa@local.xxx.yyy.zzz
[hanzawa@local]$ ls -l ~/.ssh/
-rw------- 1 hanzawa hanzawa 1743 6月 19 15:00 id_rsa
-rw-r--r-- 1 hanzawa hanzawa 422 6月 19 15:00 id_rsa.pub
公開鍵のペアが作成された。
「秘密鍵」は当然、「秘密」にしなければいけないので、自分のサーバ内に保存しておく鍵。公開鍵は、ログイン先のリモートホストで保存する。
また、途中で「パスフレーズ」を入力したが、パスフレーズ入力なしでもOK。ただし、セキュリティを考慮して推奨されない。なぜ「パスワード」ではなく「パスフレーズ」と呼ばれるのかというと、空白の入力も可能であるからだそうだ。なので、長文を入力する事も出来るが、あまり長すぎると自分が覚えてられない。
作成された公開鍵を、scpコマンドを使って、remote側のhanzawaユーザのホームディレクトリにコピーする。
[hanzawa@local]$ scp ~/.ssh/id_rsa.pub hanzawa@remote:~
hanzawa@remote's password:
id_rsa.pub 100% 422 0.4KB/s 00:00
次は、remote側での操作。
local側からコピーされたlocalの公開鍵を、remoteのauthorized_keys2ファイルに追記する。
[hanzawa@remote]$ pwd /home/hanzawa [hanzawa@remote]$ cat id_rsa.pub >> ~/.ssh/authorized_keys2 [hanzawa@remote]$ rm -f id_rsa.pub [hanzawa@remote]$ chmod 600 ~/.ssh/authorized_keys2 [hanzawa@remote]$ ls -l ~/.ssh/ -rw------- 1 hanzawa hanzawa 422 6月 19 15:48 authorized_keys2 -rw-r--r-- 1 hanzawa hanzawa 2165 6月 19 10:58 known_hosts
localの公開鍵をremoteのauthorized_keys2ファイルに追記し、パーミッションを自分だけに変更した。
これで、localからremoteに鍵ファイルでの認証でsshログインできるようになった。
試してみる。
[hanzawa@local]ssh remote
Enter passphrase for key '/home/hanzawa/.ssh/id_rsa':
[hanzawa@remote]$
無事localからremoteにログイン出来た。
上記では、local⇒remoteへの公開鍵認証を設定したが、逆のremote⇒localへのsshログインをする際にも同様に設定を行えば、相互に鍵認証ログインが実現する。
このsshの設定を行う事で、リモート接続先のアカウントの「パスワード」を入力しなくても良くなったが、秘密鍵の「パスフレーズ」を毎回入力しなければいけない。
鍵ペアを作成する際に、「パスフレーズ」の入力をせずに空白のまま鍵ペアを作成した場合は、鍵認証でのログインにはパスフレーズを入力しなくて良いので、ノンパスワードでのログインが実現する。実際、ノンパスワードにするために、パスフレーズを入力しない場合が多いようだが、やはりそれではセキュアではない。
この問題を解決するためには、「ssh-agent」と呼ばれるデーモンを利用し、パスワードをキャッシュするという手法が一般的なようなので、次はその設定を行ってみる。