公開鍵発行のトラブル

 SSHではクライアントが秘密鍵と公開鍵のペアを発行します。そしてその公開鍵をサーバー側でも同様に設定します。この公開鍵がサーバー側とクライアント側で「同じもの」がないと通信できません。
 先日、SSHサーバーの再設定を行ったところ、クライアント側から通常のように接続してみたら不通になってしまいまいた。サーバー側が新しくなったので何らかの古い情報が残っていてそれがネックになっているんだと思いました。調べてみると、クライアント側が最新の情報に更新しないと接続できないということです。
 鍵の発行はssh-keygenコマンドで行いますが、その前にknown_hostsファイルを更新します。
$ ssh-keygen -R <ホスト名 or IPアドレス>
これで接続先の情報をアップデートします。古い情報は、known_hosts_oldというファイルが作成されます。削除しても構いません。

 しかしこれでssh-keygenが使えると思っていたらエラーが出てなかなか鍵の発行ができない。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user/.ssh/id_rsa): /Users/user/.ssh/id_rsa 
Enter passphrase (empty for no passphrase): ***********
Enter same passphrase again: ***********
(ここでエラー)
 調べてみるとサーバー側のsshd_configのprotocolを1,2に設定した方がいいとか、クライアント側に予め空のid_rsaファイルを作っておくとかいろんな噂があるようですが、どういうわけか、
Enter file in which to save the key (/Users/user/.ssh/id_rsa): /Users/user/.ssh/id_rsa

Enter file in which to save the key (/Users/user/.ssh/id_rsa): id_rsa
で成功しました。ちょっと意味がわかりません。フルパスで指定しないで、相対パスで指定すればよいということなのでしょうか?とりあえずはこれで解決しました。