~/.ssh/known_hosts
fileを一時的に無視する方法はありますか?
mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 a Host key has just been changed.
The fingerprint for the RSA key sent by the remote Host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct Host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA Host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$
注意:
..いくつかの回答/コメントによって、私の質問は少し誤解を招くので、短いです予想される動作)なので、それは正常です(私の場合)があります「無視」したい理由の背後にある正当な理由)
ssh -o StrictHostKeyChecking=no
を使用すると、known_hosts
のチェックを一時的にオフにすることができます。しかし、私はこれに対して助言します。 Hostキーが変更された理由を実際に確認する必要があります。
別のオプションは、問題のホストの~/.ssh/config
に特定のエントリを追加することです。再起動するたびに新しいホストキーを生成する特定のホストがあり、正当な理由で1日に数回再起動する場合、これは有効なアプローチとなる場合があります。
Host <your problematic Host>
StrictHostKeyChecking no
POSIX環境で既知のhostsファイルを完全に無視するには、GlobalKnownHostsFile
およびUserKnownHostsFile
オプションを/dev/null
に設定します。
ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@Host
StrictHostKeyChecking=no
オプションを設定すると接続できますが、SSHは引き続き警告を表示します:
ssh -o StrictHostKeyChecking=no user@Host
他の人が指摘したように、根本的な問題に対処する方がおそらく良いでしょう。たとえば、ホストを検証するために SSH証明書認証 を検討できます。
サーバーを再インストールして識別が変更された場合は、/Users/alexus/.ssh/known_hosts
から指定された行155を削除して先に進んでください。
異なるプライベートネットワークを切り替える場合は、代わりにホスト名を使用して接続する必要があります。sshクライアントもホスト名に応じてキーを保存するためです。このようなものを/etc/hosts
に追加します。
10.52.11.171 server1
10.52.11.171 server2
サブネット1に接続されている場合はssh server1
を、サブネット2に接続されている場合はssh server2
を使用します。このようにして、両方のサーバーが異なるホストキーを持つことができます。
一部の人々はそれが正しくないと言います、あなたはこれを行う必要はありませんなど、しかし私はまた、何度も何度も組み込みデバイスをテストするためにこれが必要です。 StrictHostKeyChecking=no
を無効にする必要があります。これは正しいことですが、既知のホストファイルを/dev/null
にリセットすることもできます。ここでは、自動ログインとリモートデバイス上のps
の例を示します。
sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@Host 'ps ax'
-o StrictHostKeyChecking=no
は、ホストがknown_hostsファイルに存在しない場合にのみ機能します。
おそらくvmのクローニングが原因でホストのキーが変更されることが予想される場合は、次のようにこれらの種類のホストを無視するように強制する方がきれい(警告なし)だと思います。
# Handle possible SSH key changes
Host_key=$(ssh-keyscan -t rsa ${Host_ip})
grep "${Host_key}" ~/.ssh/known_hosts >/dev/null || {
ssh-keygen -R ${Host_ip}
echo ${Host_key} >> ~/.ssh/known_hosts
}
# connect as normal way
ssh root@${Host_ip} "hostname"