1. ホーム
  2. ssh

[解決済み] どうすれば ssh がコマンドラインから新しいホスト指紋を受け入れるように強制できますか?

2023-06-11 01:26:58

質問

標準的な

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is

というエラーメッセージが表示されます。しかし、コマンドを実行するシステム(sftpだと思いますが、それは重要ではありません)は自動化されており、新しいキーが有効な変更であることをサードパーティベンダーに確認しても、簡単に受け入れることはできません。同じシステム(とユーザー)から実行できる新しいシェルスクリプトを追加することはできますが、sshに鍵を受け入れるように指示するコマンドやコマンドライン引数はないようです。manページやGoogleで調べても何も出てきません。確かにこれは可能なのでしょうか?

どのように解決するのですか?

ここでは、クライアントに鍵を信頼するように伝える方法を説明します。よりよい方法は、あらかじめ鍵を渡しておくことです。これは第二段落で説明しました。これは Unix 上の OpenSSH クライアントのためのものなので、あなたの状況に関係するものであることを願っています。

を設定することができます。 StrictHostKeyChecking パラメータで指定します。これにはオプション yes , no そして ask . デフォルトは ask . システム全体に設定するには /etc/ssh/ssh_config 自分用に設定するには ~/.ssh/config を編集してください。また、単一のコマンドに対して設定するには、コマンドラインでそのオプションを与えてください。

ssh -o "StrictHostKeyChecking no" hostname

リモートシステムのホストキーにアクセスできる場合、別の方法として、ホストキーを known_hosts ファイルに追加して、SSH がそれを知っていて質問してこないようにすることです。もしこれが可能なら、セキュリティの観点からもその方がよいでしょう。結局のところ、警告は正しく、あなたは本当に中間者攻撃にさらされるかもしれないのです。

たとえば、キーを取得し、known_hosts ファイルに追加するスクリプトは次のとおりです。

ssh -o 'StrictHostKeyChecking no' hostname cat /etc/ssh/ssh_host_dsa_key.pub >>~/.ssh/known_hosts