ssh 〜共通鍵方式から公開鍵方式へ〜

仕組みやその他についてはまだ整理中。
重要な参考資料は以下を参照。

ターミナルA (=ローカル・ターミナル)上で

ターミナルA上で、秘密鍵と公開鍵を作る。

hjk@aptiva:~$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/hjk/.ssh/id_dsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/hjk/.ssh/id_dsa.
Your public key has been saved in /home/hjk/.ssh/id_dsa.pub.
The key fingerprint is:
ab:25:4f:30:85:b3:89:a6:d9:0d:e5:9d:2c:00:11:42 hjk@aptiva

/home/hjk/.ssh/ 以下に と三つのものができる。


hjk@aptiva:~/.ssh$ cat id_dsa.pub 
ssh-dss AAAAB3NzaC1kc3MAAACBAJmvxJ4yML0cbn0g5hBbPEkW6AsWOsTvCwiz3SJ1+7e/K6gsntb
N2RPKT7P3aEWObNyh9rxb8pVt9iVOhxzncmHRmZTvQoRUZxCrV2P2KyhfknIhKaH0RxXDJUnQSnIf10
EedYxSQvO7hxRIw5Zkt8mPp0qYpUpQ4xYLy8sKqrVzAAAAFQCXjfnVtXvctXS3GLWOuT/uoEDqewAAA
IAPoiUMlTEbvC/qS+ZUScrU6bADmjKIAAoO2ZaRqebg5ScGBumrZr3ZhBgxjaqfsnlhHiyOpdXtQyCA
owxmfr52/rRijuT0Oe5KoApxb3Ce53P2F7SVC3XL3Oy0g0IEoIDr+maoe52b43rCiTVixb+JyjADjWU
AeIJHzYbfmYceXQAAAIBf/k2BN5dAm2Pneuz+SrHZCDIDzZZPXZkAutABu5vVD/k6HZkd4sdo+k7cgX
aKO9FIFVsucOyq6S38R9IPmKxm4vdur0acpdL9ep88j2FbjlwAJt++yaAGFRkl+NjZQbb4aq2RK7omD
msqkvL52vaCou72vfHSnPGjAWue/ggcfg== hjk@aptiva
(実際は1行)

ターミナルB (=リモートホスト・ターミナル) 上で

ターミナルをもうひとつ(ターミナルB)開ける。
共通鍵でbcoに入る

(初めて共通鍵認証でログインするとき)
hjk@aptiva:~$ ssh -l hujioka 192.168.0.129
The authenticity of host '192.168.0.129 (192.168.0.129)' can't be established.
RSA key fingerprint is d4:38:80:d8:08:3c:57:22:55:ab:b5:6a:c7:ff:ec:3f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.129' (RSA) to the list of known hosts.
hujioka@192.168.0.129's password: 

(2度目から共通鍵認証でログインするとき)
hjk@aptiva:~$ ssh -l hujioka 192.168.0.129
hujioka@192.168.0.129's password: <=パスフレーズではなくパスワードが求められる
Linux bco 2.4.20 #1 Wed Mar 12 15:51:17 JST 2003 i686 GNU/Linux

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Dec 10 18:05:52 2004 from client45.picure.l.u-tokyo.ac.jp
hujioka@bco:~$

~/に

hujioka@bco:~$ mkdir .ssh
hujioka@bco:~$ chmod 700 .ssh
hujioka@bco:~$ touch .ssh/authorized_keys
hujioka@bco:~$ chmod 644 authorized_keys

しておく。

公開鍵を登録(パスフレーズログイン)

ターミナルA上でcatして表示させておいた id_dsa.pub の中身をマウスで (あるいは Ctrl+a で)全文指定して右クリック

ターミナルB上で、以下のようなコマンド(途中は左クリックで上の id_rsa.pub をコピペ)を実行。


hujioka@bco:~$ echo 'ssh-dss AAAAB3NzaC1kc3MAAACBAJmvx
J4yML0cbn0g5hBbPEkW6AsWOsTvCwiz3SJ1+7e/K6gsntbN2RPKT7P3aEWObNyh9rxb8pVt9iVOhxzn
cmHRmZTvQoRUZxCrV2P2KyhfknIhKaH0RxXDJUnQSnIf10EedYxSQvO7hxRIw5Zkt8mPp0qYpUpQ4xY
Ly8sKqrVzAAAAFQCXjfnVtXvctXS3GLWOuT/uoEDqewAAAIAPoiUMlTEbvC/qS+ZUScrU6bADmjKIAA
oO2ZaRqebg5ScGBumrZr3ZhBgxjaqfsnlhHiyOpdXtQyCAowxmfr52/rRijuT0Oe5KoApxb3Ce53P2F
7SVC3XL3Oy0g0IEoIDr+maoe52b43rCiTVixb+JyjADjWUAeIJHzYbfmYceXQAAAIBf/k2BN5dAm2Pn
euz+SrHZCDIDzZZPXZkAutABu5vVD/k6HZkd4sdo+k7cgXaKO9FIFVsucOyq6S38R9IPmKxm4vdur0a
cpdL9ep88j2FbjlwAJt++yaAGFRkl+NjZQbb4aq2RK7omDmsqkvL52vaCou72vfHSnPGjAWue/ggcfg
== hjk@aptiva' >> .ssh/authorized_keys 

黒字は id_dsa_pub のコピペ。
赤字はコマンド

2台以上のマシンのdsaキーを登録するときも同様。
ちなみに2台以上になると次のように authorized_key に追加されているのが わかる。

hujioka@bco:~/.ssh$ cat authorized_keys 
ssh-dss AAAAB3NzaC1kc3MAAACBAJmvxJ4yML0cbn0g5hBbPEkW6AsWOsTvCwiz3SJ1+7e/K6gsntb
N2RPKT7P3aEWObNyh9rxb8pVt9iVOhxzncmHRmZTvQoRUZxCrV2P2KyhfknIhKaH0RxXDJUnQSnIf10
EedYxSQvO7hxRIw5Zkt8mPp0qYpUpQ4xYLy8sKqrVzAAAAFQCXjfnVtXvctXS3GLWOuT/uoEDqewAAA
IAPoiUMlTEbvC/qS+ZUScrU6bADmjKIAAoO2ZaRqebg5ScGBumrZr3ZhBgxjaqfsnlhHiyOpdXtQyCA
owxmfr52/rRijuT0Oe5KoApxb3Ce53P2F7SVC3XL3Oy0g0IEoIDr+maoe52b43rCiTVixb+JyjADjWU
AeIJHzYbfmYceXQAAAIBf/k2BN5dAm2Pneuz+SrHZCDIDzZZPXZkAutABu5vVD/k6HZkd4sdo+k7cgX
aKO9FIFVsucOyq6S38R9IPmKxm4vdur0acpdL9ep88j2FbjlwAJt++yaAGFRkl+NjZQbb4aq2RK7omD
msqkvL52vaCou72vfHSnPGjAWue/ggcfg== hjk@aptiva
sh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAvUmsokfi1bw0+QfUt90N6zb
no2D+Fu1fASs29pS44OMeLa67TcFXFY+sg2loa8BOUSRJcVY7oz+uoPbNYBQOHCBk438EwXlsUnc16H
uBN02PlN6DC/mYUqiC2/Us84jmcs7YjKhgIXIJ9CQl3xwUZ2fPS/qjydpKTjLGJGdnl8s= hjk@hoge

オレンジ色は2度目に

したときに追加される行

最終的な確認を行う。
一度、logoutしてから、ssh -v オプションで入ってみる。

実際に流れる情報は、例えばつぎのようなものだ。
途中、パスワードではなく、パスフレーズが求められている点に注意。
こうなっていれば、共通鍵方式ではなく、公開・秘密鍵(dsa方式)で ログインできるようになったことがわかる。


hjk@aptiva:~$ ssh -v hujioka@192.168.0.129
OpenSSH_3.8.1p1 Debian-8.sarge.4, OpenSSL 0.9.7e 25 Oct 2004
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to 192.168.0.129 [192.168.0.129] port 22.
debug1: Connection established.
debug1: identity file /home/hjk/.ssh/identity type -1
debug1: identity file /home/hjk/.ssh/id_rsa type -1
debug1: identity file /home/hjk/.ssh/id_dsa type 2
debug1: Remote protocol version 1.99, remote software version OpenSSH_3.6.1p2 Debian 1:3.6.1p2-9
debug1: match: OpenSSH_3.6.1p2 Debian 1:3.6.1p2-9 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.4
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host '192.168.0.129' is known and matches the RSA host key.
debug1: Found key in /home/hjk/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Trying private key: /home/hjk/.ssh/identity
debug1: Trying private key: /home/hjk/.ssh/id_rsa
debug1: Offering public key: /home/hjk/.ssh/id_dsa
debug1: Server accepts key: pkalg ssh-dss blen 433
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type 
Enter passphrase for key '/home/hjk/.ssh/id_dsa': 
debug1: read PEM private key done: type DSA
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
Linux bco 2.4.20 #1 Wed Mar 12 15:51:17 JST 2003 i686 GNU/Linux

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Dec 14 15:48:27 2004 from client45.picure.l.u-tokyo.ac.jp
hujioka@bco:~$ 

ssh-agent でパスフレーズを省略する

これで一応、安心して ssh を使っての接続が可能になったのだが、 数時間のうちにパスフレーズを何度も連打することになり、 時として億劫になってしまうことがある。

そこで、一時的にローカルマシン(接続元)にパスフレーズを保存しておき、 起動時に一度パスフレーズを登録しておけば、以後はパスフレーズを 省略して、リモートマシン(接続先)に接続できるようにする。

手順としては、

  1. eval `ssh-agent` で ssh-agent を起動させ
  2. ssh-add でキー(当方の場合、dsaキーのみ)を登録
  3. eval `ssh-agent -k` でテスト終了
となる。

重要な参考資料は以下を参照。