メモの日々


2024年04月15日(月) [長年日記]

[howto][unix][security] SSHで未知のホストの確認プロンプトを表示しないようにする

SSHで未知のホストに接続しようとすると次のようなプロンプトが表示されるが、これを表示したくないことがある(スクリプト内でSSHを実行するときなど)。

The authenticity of host 'localhost (::1)' can't be established.
ED25519 key fingerprint is SHA256:V1NLamwjGYVi4hjxTg1Ko96YVh4xhsoYI2sc1rPGdno.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

検索するとSSHのStrictHostKeyCheckingオプションを no にする方法がヒットするが、それよりも、対象ホストの公開鍵を事前に ~/.ssh/known_hosts に登録しておく方が自然だと思う。

公開鍵の取得は ssh-keyscanコマンドでできる。

$ ssh-keyscan -t ed25519 localhost
# localhost:22 SSH-2.0-OpenSSH_8.7
localhost ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHO8iGPxukxiQPrGGJqtTDdfaRYxNvf+CegVOvK2JyBy

ssh-keyscanの出力はそのまま ~/.ssh/known_hosts ファイルに追加できる。~/.ssh/known_hosts に行を追加することで件のプロンプトは表示されなくなる。

ただし、ssh-keyscan の接続先が正しいホストでない可能性があるので、別途公開鍵またはそのフィンガープリントの確認は必要。

接続先ホストの公開鍵はホストの /etc/ssh/ あたりにあるはず。フィンガープリントはssh-keygen -lで表示できる。

$ cat /etc/ssh/ssh_host_ed25519_key.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHO8iGPxukxiQPrGGJqtTDdfaRYxNvf+CegVOvK2JyBy

$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:V1NLamwjGYVi4hjxTg1Ko96YVh4xhsoYI2sc1rPGdno no comment (ED25519)

$ ssh-keygen -lf <(ssh-keyscan -t ed25519 localhost)
# localhost:22 SSH-2.0-OpenSSH_8.7
256 SHA256:V1NLamwjGYVi4hjxTg1Ko96YVh4xhsoYI2sc1rPGdno localhost (ED25519)