カウンター

2014年2月23日日曜日

sshの鍵交換

今回はsshの鍵交換です。sshでサーバから別のサーバにアクセスする場合、基本的にはいちいちパスワードを入力しないといけないですよね。しかし、色々都合が悪いときがあります。例えばシェルでリモートサーバ上で処理をしたりscpでファイルを取得する際です。(パスワード必須でも、実行する手段はありますが。)

このような場合、あらかじめサーバ間で鍵を交換しておくことで、鍵による認証によってパスワード入力無しにsshを行えるようになります。

概念的には、サーバAが公開鍵、秘密鍵のペアを作成しサーバBに公開鍵を渡しておくことで、サーバB側でのsshのログイン認証をその鍵で行う、というものです。サーバAからサーバBに渡すと、サーバBへのログイン時のパスワード認証が省略されます。その逆を行うことで、サーバA、サーバB相互にパスワード認証せずにsshログインが可能になるというものです。

実際のコマンドで紹介します。

■サーバAで公開鍵・秘密鍵のペアを作成してサーバBに送る

$ su - hoge
まずsshでログインしたいユーザになっておきます。(ここではhoge)
$ ssh-keygen -t rsa
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa):
で鍵を作成します。"-t"オプションは鍵の種類を指定します。"rsa"の他には"dsa","ecdsa"等あるようです。ファイル名の指定は無しでもいいです。しなければ/home/hoge/.ssh/id_rsaが鍵ファイルとして生成されます。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
上記のようにパスフレーズというのを聞かれますが、何も入れずそのままEnterでOKです。入れてしまうと後々ログインの度にパスフレーズが聞かれます。
$ ls /home/hoge/.ssh/
id_rsa id_rsa.pub
鍵ができました。 pubがついているほうが公開鍵です。中身を見てみましょう。
$ cat ./id_rsa.pub
sh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDnU8j4jni2h/YxCloVDnxv447qr01PI8+ThDCT79edjOxHWAn8ai7mYdckkJiE2aIPPTqZbTEz09++J7druRw5ksUlmadtIoy9gx/XsyulqeNASv7sPG66bN3Zwf3GvlUzCn+3CbECMu24W9im4gtY1hq8R+L0iWvZRFKVpKUIPDNpzryJJwA+n3el+UUqcjWVZuTN5Z7M8dMdwDg/TshuQFwgG0yO8fJonc/y+dJR6rH05tCUL1cIHM8HFEfQHmSuewUpDMilNeZ3+KaALJPosBfZQ1/g71fb4fnIVfDyxz6MG2FKJOsoWFFatCdhMreo3lmetg4E4MJK5IlAOBLn hoge@hostA
こんな感じ。この鍵情報をサーバBにわたします。
$ scp ./id_rsa.pub hoge@hostB:/home/hoge/
テキストなので、コピーして貼り付けでもよいですが、ここではscpで送りました。以上でサーバA側での作業は完了です。


■サーバB側での設定

サーバB側では、
・sshサーバの設定変更
・サーバAで生成した鍵を登録
をおこないます。

まずはsshサーバ設定の変更を行っていきます。

$ vi /etc/ssh/sshd_config

でsshサーバの設定ファイルに対して、下記3行をコメントアウトからはずして有効化します。

=======================================
~
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
~
=======================================

RSAAuthentication
→RSAによる認証を許可するかどうかを設定する

PukeyAutentication
→公開鍵による認証を受け付けるかどうかを設定する

AuthorizedKeysFile
→公開鍵情報を持つファイルを指定します。上記設定の場合はこの"authorized_keys"というファイルに、実際の公開鍵を追記します。

$ service sshd restart

でsshdを再起動します。これで設定が反映されます。
次は、公開鍵の登録です。

公開鍵は、上記"AuthorizedKeyFiles"で鍵情報のファイルを指定しているので、

$ ls /home/hoge/
id_rsa.pub

で公開鍵が送られてきていることを確認し、

$ cat /home/hoge/id_rsa.pub >> /home/hoge/.ssh/authorized_keys

でキーファイルにサーバAの公開鍵を追記します。
以上でサーバB側の設定も完了です。

サーバAからサーバBにhogeユーザでsshログインがパスワード無しでできるはずです。
逆もやりたい場合は、上記手順を逆に読み替えて設定を入れればOKです。