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 にする。