Raspberry Pi への ssh 接続に公開鍵認証を使う

あっさりいけるかと思ったら割とハマってしまったので、繰り返さないためにメモ。

必要性

パスワード入力での ssh 接続はブルートフォースアタックのリスクがあるので、公開鍵認証の利用(とパスワードでの接続の無効化)が推奨されている。

公開鍵を Raspberry Pi に送り込んでみる

Mac or Linux では、"ssh-copy-id" というものを使えばいとも簡単に鍵を転送できるらしい。

$ ssh-copy-id -i ~/.ssh/id_rsa.pub raspberrypi.local

残念ながら Windows なので別の手を使う。

WinSCP でファイル転送

WinSCP を使うと SFTP (SSH File Transfer Protocol) で超絶簡単にファイルを転送できる。 これは今後も便利に使えそうなので、試してみてよかった。

で、ssh で入って ~/.ssh/authorized_keys に格納した。

これで鍵認証でログインできるはず・・・ → "Authentication refused" orz

原因と対策

/var/log/auth.log を参照して原因を探る。

authorized_keys が正しい「ファイル」じゃない

正直「???」ってなった。authorized_keys 「フォルダ」の中に鍵を格納するものだと思ったヨ。。。はずかしい。

Permission の見直し

.ssh -> 700
authorized_keys -> 600

sshd_config の見直し

$ sudo /etc/ssh/emacs sshd_config
ServerKeyBits 1024
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile ~/.ssh/authorized_keys

OpenSSH 形式と PuTTy 形式の違い

ここが一番ハマッた。

OpenSSH の鍵は PuTTy ではそのまま使えないらしい。。GitHub で使えてたから鍵がまずいとは全く思ってなかった。

puttygen で秘密鍵・公開鍵を変換して配置しなおしたところ、無事認証できるようになった。