パスワードなしのログイン

RSAはもう古い。Ed25519だ。

$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/okumura/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): Enterだけ
Enter same passphrase again: Enterだけ
Your identification has been saved in /home/okumura/.ssh/id_ed25519.
Your public key has been saved in /home/okumura/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx hoge@example.com
The key's randomart image is:
+--[ED25519 256]--+
|      略         |
+----[SHA256]-----+

「Enterだけ」と書いたところで,パスワード(パスフレーズ)を打ち込むこともできる。そのほうが安全だが,ここではパスワードなしのログインをしたいので,空にしておく。

これで ~/.ssh に秘密鍵 id_ed25519 と公開鍵 id_ed25519.pub ができる。公開鍵のほうを,ログインしたい相手方の ~/.ssh/authorized_keys というファイルにアペンドする(なければ作る)。

これで ssh でパスワードなしで入れるはず。うまくいかない場合は ssh -v でデバッグする。あるいは ~/.ssh/config に余計なことが書いてないか調べる。相手側の /etc/ssh/sshd_config に PubkeyAuthentication yes と書いてあるか調べる(書いてなくてもこれがデフォルトのはず)。sshd_config を変更したら sshd を restart する。

今は Windows にも ssh が入っているので同様な手順でできる。

ついでに,放置しておくと ssh 接続が切れるのを防ぎたければ,~/.ssh/config というファイルに ServerAliveInterval 60 のようなのを書き込めばよい。

これを書くきっかけは,パスワードの受け渡しはどうすればいいかというツイッターでの話題だった。DH 鍵交換すればいい。Diffie-Hellman Key Exchange というページで JavaScript で計算できる(openssl を使うやりかたも載っている)。昔は /etc/shadow の行(ソルト+ハッシュ)を送った。今なら id_rsa.pub を送ればいい。いや RSA はもう古い。という流れだ。

[追記] ~/.ssh のパーミッションは 700 にしておく。秘密鍵は 600 にする。