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

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 のようなのを書き込めばよい。

サーバにシェルログインアカウントを作ってもらう際に、パスワードの受け渡しが面倒である。昔は初期パスワード設定済みの /etc/shadow の行(ソルト+ハッシュ)をユーザが作成し、サーバ管理者に送った。今ならユーザが公開鍵 id_ed25519.pub をサーバ管理者に送ればいい。

昔は Ed25519 や ECDSA ではなく RSA を使っていた。鍵のファイル名は id_rsa(.pub) であった。この方式(ssh-rsa)に使われていたハッシュアルゴリズム SHA-1 が廃止されたので、macOS Ventura から ssh-rsa はデフォルトで使えなくなっている。Ventura にしたら古い CentOS 6(2020年にサポート終了)のサーバに ssh でログインできなくなったという話をよく聞く。とりあえずはクライアント(Mac)側の ~/.ssh/config に ssh-rsa を生かす設定を書き加えれば使えるようになるが、Ed25519 など新しい方式を使うようにするべきである。

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