2013年2月15日金曜日

公開鍵の複数管理

「RSA設定手順 」の記事と被りますが、
公開鍵を複数作成した際の接続方法についてになります。

たとえば、次のように4台のサーバーがあった場合に、
・サーバーA(接続側)から、サーバーB(接続先)、サーバーC(接続先)には、
  公開鍵1でパスワード無しで接続できるようにする。
・サーバーA(接続側)から、サーバーD(接続先)には、
  公開鍵2でパスワード無しで接続できるようにする。
と言ったような設定にしたい場合になります。

基本的に分ける必要は無いと思いますが・・・特定のユーザーには特定のサーバーのみログイン用にする場合とかで利用するのかな?:(;゙゚'ω゚'):

では、さっそく設定の方をやってみます(`・ω・´)シャキーン

設定の手順としては、まず、接続を行いたい側のサーバーで公開鍵を作成し、
その公開鍵を接続したいサーバーへ転送しまくるという形になります。

サーバー構成は次のようになっています。
・サーバーA(192.168.10.227)
・サーバーB(192.168.10.228)
・サーバーC(192.168.10.229)
・サーバーD(192.168.10.230)

■手順1)接続したい側のサーバーAで公開鍵を作成する。
$ ssh-keygen -b 5678 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_rsa):
Created directory '/home/admin/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/admin/.ssh/id_rsa.
Your public key has been saved in /home/admin/.ssh/id_rsa.pub.
The key fingerprint is:
18:0c:43:9c:6b:47:6b:20:93:f8:c6:b8:f2:9d:bd:51 admin@****.vir.kagoya.net
■手順2)id_rsa.pubの公開鍵が作成されている事を確認する
$ ls -alt ~/.ssh/
合計 24
drwx------ 2 admin users 4096  2月 15 01:29 .
-rw-r--r-- 1 admin users  397  2月 15 01:29 known_hosts
-rw------- 1 admin users 4442  2月 15 01:27 id_rsa
-rw-r--r-- 1 admin users 1012  2月 15 01:27 id_rsa.pub
drwx------ 4 admin users 4096  2月 15 01:27 ..
■手順3)サーバーAの公開鍵を接続先のサーバーBへ書き込む
$ cat /home/admin/.ssh/id_rsa.pub | ssh admin@192.168.10.228 "cat >> /home/admin/.ssh/authorized_keys && chmod 600 /home/admin/.ssh/authorized_keys"
The authenticity of host '192.168.10.228 (192.168.10.228)' can't be established.
RSA key fingerprint is f5:59:e5:95:08:b6:03:7e:92:8c:27:cf:1a:c2:5f:9b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.228' (RSA) to the list of known hosts.
admin@192.168.10.228's password:
■手順4)サーバーAからサーバーBにパスワード無しでログインできるか確認する
$ ssh 192.168.10.228
Last login: Fri Feb 15 01:21:50 2013 from tky19-p171.flets.hi-ho.ne.jp
ログインキタ――(゚∀゚)――!!

ログアウトする
$ exit
■手順5)サーバーAの公開鍵を接続先のサーバーCへ書き込む
※authorized_keysのファイルに対して「>>」で追加書き込みで書くこと。
$ cat /home/admin/.ssh/id_rsa.pub | ssh admin@192.168.10.229 "cat >> /home/admin/.ssh/authorized_keys && chmod 600 /home/admin/.ssh/authorized_keys"
The authenticity of host '192.168.10.229 (192.168.10.229)' can't be established.
RSA key fingerprint is f5:59:e5:95:08:b6:03:7e:92:8c:27:cf:1a:c2:5f:9b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.229' (RSA) to the list of known hosts.
admin@192.168.10.229's password:
■手順6)サーバーAからサーバーCにパスワード無しでログインできるか確認する
$ ssh admin@192.168.10.229
Last login: Fri Jan 11 12:40:35 2013 from 122x208x42x218.ap122.ftth.ucom.ne.jp
[admin@v2776 ~]$ exit
logout
Connection to 192.168.10.229 closed.
ログイン成功( ̄ー ̄)bグッ!

基本的には、接続したい側のサーバーで作成した公開鍵を
パスワード認証無しで接続したいサーバー先に転送すれば、
その転送先のサーバーへはパスワード無しでログインできるようになります。

なので、接続先のサーバーがいくつ増えようが、
同じ公開鍵を増えたサーバーに追加していけば良いだけになります。

次は、サーバーAで公開鍵を複数生成し、
接続先のサーバーごとに転送する公開鍵を分けた場合についてになります。

まず、サーバーAからサーバーDに接続するための公開鍵をもう一つ作ってみます。

■手順7)サーバーDようの公開鍵を作成する
$ ssh-keygen -b 5678 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_rsa):
/home/admin/.ssh/id_rsa already exists.
Overwrite (y/n)? n
既に、id_rsaがある場合には、上書きしますか?という確認がされます。
これを上書きしてしまうと、先ほど行ったサーバーB,サーバーCに対して、
パスワード無しでのログインが行えなくなってします。
そのため、別名として保存させる必要があります。

ひとまず、「n」を押してキャンセルして、
再度、公開鍵作成コマンドを実行します。
Enter file in which to save the key (/home/admin/.ssh/id_rsa):
と聞かれたら、id_rsaのファイル名を次のように指定してあげます。
/home/admin/.ssh/id_rsa.192.168.10.230
残りの確認は全てエンターを入力して、公開鍵を作ります。
$ ssh-keygen -b 5678 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_rsa): /home/admin/.ssh/id_rsa.192.168.10.230
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/admin/.ssh/id_rsa.192.168.10.230.
Your public key has been saved in /home/admin/.ssh/id_rsa.192.168.10.230.pub.
The key fingerprint is:
09:19:15:03:64:cc:dd:90:8e:d7:79:39:ef:6e:12:1c admin@*****.vir.kagoya.net
■手順8)公開鍵を確認する
id_rsa.192.168.10.230.pubというファイル名でサーバーD用の公開鍵が作られていると思います。
$ ls -alt ~/.ssh/
合計 48
drwx------ 2 admin users 4096  2月 15 02:06 .
-rw------- 1 admin users 4442  2月 15 02:06 id_rsa.192.168.10.230
-rw-r--r-- 1 admin users 1012  2月 15 02:06 id_rsa.192.168.10.230.pub
-rw-r--r-- 1 admin users  794  2月 15 01:51 known_hosts
-rw------- 1 admin users 4442  2月 15 01:27 id_rsa
-rw-r--r-- 1 admin users 1012  2月 15 01:27 id_rsa.pub
drwx------ 4 admin users 4096  2月 15 01:27 ..
■手順9)今度はこれを、サーバーDのauthorized_keysに追加書き込みを行います。
$ cat /home/admin/.ssh/id_rsa.192.168.10.230.pub | ssh admin@192.168.10.230 "cat >> /home/admin/.ssh/authorized_keys && chmod 600 /home/admin/.ssh/authorized_keys"
The authenticity of host '192.168.10.230 (192.168.10.230)' can't be established.
RSA key fingerprint is f5:59:e5:95:08:b6:03:7e:92:8c:27:cf:1a:c2:5f:9b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.230' (RSA) to the list of known hosts.
admin@192.168.10.230's password:
bash: /home/admin/.ssh/authorized_keys: そのようなファイルやディレクトリはありません
接続先に.sshのディレクトリが無いと上記のエラーが発生します。
$ ls -alt
合計 32
-rw------- 1 admin users  105  1月 10 01:28 2013 .bash_history
drwxr-xr-x 2 root  root  4096  1月  9 14:00 2013 php
drwx------ 3 admin users 4096  1月  9 13:50 2013 .
-rw------- 1 admin users  877  1月  9 12:00 2013 .viminfo
drwxr-xr-x 3 root  root  4096 12月 26 18:49 2012 ..
-rw-r--r-- 1 admin users   18  5月 11 03:45 2012 .bash_logout
-rw-r--r-- 1 admin users  176  5月 11 03:45 2012 .bash_profile
-rw-r--r-- 1 admin users  124  5月 11 03:45 2012 .bashrc
一度、接続先にログインして、そこからSSHで別サーバーまたは自分自身にログインすると、
自動で.sshディレクトリが作成されます。
$ ssh 192.168.10.230
The authenticity of host '[192.168.10.230]:12322 ([192.168.10.230]:12322)' can't be established.
RSA key fingerprint is f5:59:e5:95:08:b6:03:7e:92:8c:27:cf:1a:c2:5f:9b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.10.230]:12322' (RSA) to the list of known hosts.
admin@192.168.10.230's password:
Last login: Fri Feb 15 02:07:56 2013 from *****.vir.kagoya.net
ディレクトリが出来たか確認してみる
$ ls -alt
合計 36
drwx------ 2 admin users 4096  2月 15 02:08 2013 .ssh
drwx------ 4 admin users 4096  2月 15 02:08 2013 .
-rw------- 1 admin users  105  1月 10 01:28 2013 .bash_history
drwxr-xr-x 2 root  root  4096  1月  9 14:00 2013 php
-rw------- 1 admin users  877  1月  9 12:00 2013 .viminfo
drwxr-xr-x 3 root  root  4096 12月 26 18:49 2012 ..
-rw-r--r-- 1 admin users   18  5月 11 03:45 2012 .bash_logout
-rw-r--r-- 1 admin users  176  5月 11 03:45 2012 .bash_profile
-rw-r--r-- 1 admin users  124  5月 11 03:45 2012 .bashrc
接続先のサーバーで.sshのディレクトリが作られたら再度コマンドを実行します。
cat /home/admin/.ssh/id_rsa.192.168.10.230.pub | ssh admin@192.168.10.230 "cat >> /home/admin/.ssh/authorized_keys && chmod 600 /home/admin/.ssh/authorized_keys"
admin@192.168.10.230's password:
■手順10)無事に追加されたのでログインを試してみます。
$ ssh 192.168.10.230
admin@192.168.10.230's password:
パスワードの認証を求められてしまいますガ━━(;゚Д゚)━━ン!!

複数公開鍵がある場合には、どの公開鍵を使うかオプションで指定してあげる必要があるみたいです。
次のように-iオプションを使って、利用する公開鍵を指定してあげると、パスワードが求められなくなります。
$ ssh 192.168.10.230 -i /home/admin/.ssh/id_rsa.192.168.10.230
Last login: Fri Feb 15 02:08:57 2013 from ****.vir.kagoya.net
■手順11)configファイルの作成
手順10の方法で、接続先ごとに公開鍵をしていするのはかなり面倒です:(;゙゚'ω゚'):
そこで、設定ファイルの出番になりますド━━━━m9(゚∀゚)━━━━ン!!

SSH用の設定ファイルを作成する事で、各オプションなどの入力の手間を省くことが可能になります。

サーバーAでconfigファイルを作成する
#ログインしているユーザーのホームディレクトリの.sshにconfigというファイルを作成
vi ~/.ssh/config
#サーバーB
Host 192.168.10.228
    HostName        192.168.10.228
    Port            12322
    IdentityFile    ~/.ssh/id_rsa
    User            admin
#サーバーC
Host server-c
    HostName        192.168.10.229
    Port            12322
    IdentityFile    ~/.ssh/id_rsa
    User            admin
#サーバーD
Host 192.168.10.230
    HostName        192.168.10.230
    Port            12322
    IdentityFile    ~/.ssh/id_rsa.192.168.10.230
    User            admin
#    Protocol        1
各項目の説明
・Host
  SSHコマンド実行時に指定するHOST名を指定する。任意の値が使えます。
・HostName
  実際のホスト名
・Port
  ポート番号
・IdentityFile
  HostNameで指定したホストで利用する鍵を指定する
・User
  ユーザ名
・Protocol
  利用する ssh バージョンを指定します (1, 2)
鍵、ユーザ名、ssh バージョンなどを使い分けなければならない場合にとても便利です。
また、svn, git, scp, sftp などでの利用でも反映されるため、オプションを覚える必要がなくなります。

■手順12)各サーバーへの接続確認をしてみる
サーバーAからサーバーBに接続してみる
$ ssh 192.168.10.228
Last login: Fri Feb 15 02:26:50 2013 from *****.vir.kagoya.net
$ exit
logout
Connection to 192.168.10.228 closed.
サーバーAからサーバーCに接続してみる
先程のconfigでサーバーCの定義時にHOSTの値を「server-c」と定義したので、
その値を利用して接続する。
$ ssh server-c
Last login: Fri Feb 15 02:25:58 2013 from *****.vir.kagoya.net
$ exit
logout
Connection to 192.168.10.229 closed.
サーバーAからサーバーDに接続してみる
$ ssh 192.168.10.230
Last login: Fri Feb 15 02:25:41 2013 from *****.vir.kagoya.net
$ exit
logout
Connection to 192.168.10.230 closed.
以上(`・ω・´)ゞビシッ!!
参考URL

0 件のコメント:

コメントを投稿