わーくあうと!

日々の作業でためになったことをアウトプットすることで自分の成長につながればなと。

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形式の公開鍵")しないといけない.