SSHの鍵交換でPermission denied
パスワード入力無しでSSHを実現しようとして壁にぶつかったので解決方をメモしておく。
環境
centos6
秘密鍵名:id_hogehoge
公開鍵名:id_hogehoge.pub
状況
接続元のサーバーの~/.sshディレクトリに秘密鍵を入れて、接続先の~/.ssh/authorized_keysに公開鍵の内容を追記した。
その状態で SSH {接続先のIP} をしたけど下記のメッセージが表示されて接続できない。
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
解決
結論から言うと秘密鍵の名前(id_hogehoge)がまずかった。
sshに「-vvv」オプションをつけて実行するとデバッグプリントが表示されるのだけれど、どうもid_hogehogeを見に行ってくれてなさそうだという事で調べてみたら案の定そうだった。
どうやらデフォルトでは~/.ssh/id_dsa ,~/.ssh/id_ecdsaおよび~/.ssh/id_rsaの名前の秘密鍵しか読みにいかないらしい。
増やしたい場合は設定ファイル(/etc/ssh/ssh_config)にIdentityFileプロパティを追加する.
IdentityFile ~/.ssh/id_hogehoge
設定ファイルを編集したくなかったら秘密鍵の名前を大人しくid_rsaにするのでもOK。
ちなみにここにたどり着くまでに↓のような点もチェックした。
・ユーザーのホームディレクトリのパーミッションは適切か(700など).
・~/.ssh ディレクトリのパーミッションは適切か(700など).
・秘密鍵のパーミッションは適切か(600など).
・puttyで作ったopenssh形式に公開鍵は変換("ssh-keygen -i -f Puttyで作った公開鍵 > openssh形式の公開鍵")しないといけない.