
ファイルを一時的に無視する方法はありますか~/.ssh/known_hosts
?
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$
注記:
いくつかの回答/コメントで私の質問が少し誤解を招くものであることに気づきました。そのため、短くします。期待される動作なので、(私の場合は)正常です「無視」したい理由は正当な理由があるからです)
答え1
ssh -o StrictHostKeyChecking=no
チェックを一時的にオフにするには、を使用できますknown_hosts
。ただし、これはお勧めしません。ホスト キーが変更された理由を必ず確認する必要があります。
もう 1 つのオプションは、問題のホストの特定のエントリを追加することです~/.ssh/config
。再起動するたびに新しいホスト キーを生成し、正当な理由で 1 日に数回再起動される特定のホストがある場合、これは有効なアプローチになる可能性があります。
Host <your problematic host>
StrictHostKeyChecking no
答え2
POSIX 環境で既知のホスト ファイルを完全に無視するには、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証明書認証たとえば、ホストを検証します。
答え3
サーバーを再インストールして識別情報が変更された場合は、指定された行 155 を削除して/Users/alexus/.ssh/known_hosts
先に進む必要があります。
異なるプライベート ネットワーク間を切り替える場合は、SSH クライアントもホスト名に応じてキーを保存するため、代わりにホスト名を使用して接続する必要があります。 に次のような内容を追加します/etc/hosts
。
10.52.11.171 server1
10.52.11.171 server2
そして、ssh server1
サブネット 1 に接続するときとssh server2
サブネット 2 に接続するときに使用します。この方法では、両方のサーバーが異なるホストキーを持つことができます。
答え4
-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"