Akio's Log

ソフトウェア開発、プロジェクトマネジメント、プログラミング、ランニングなどなど

自分サーバの構築その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台。

  • local : CentOS5(これまでVM上に作った仮想マシン
  • remote : CentOS4.4(社内にある既存のLinuxマシン)

この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」と呼ばれるデーモンを利用し、パスワードをキャッシュするという手法が一般的なようなので、次はその設定を行ってみる。