web-dev-qa-db-ja.com

`〜/ .ssh / known_hosts`ファイルを一時的に無視しますか?

~/.ssh/known_hostsfileを一時的に無視する方法はありますか?

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$ 

注意:

..いくつかの回答/コメントによって、私の質問は少し誤解を招くので、短いです予想される動作)なので、それは正常です(私の場合)があります「無視」したい理由の背後にある正当な理由)

54
alexus

ssh -o StrictHostKeyChecking=noを使用すると、known_hostsのチェックを一時的にオフにすることができます。しかし、私はこれに対して助言します。 Hostキーが変更された理由を実際に確認する必要があります。

別のオプションは、問題のホストの~/.ssh/configに特定のエントリを追加することです。再起動するたびに新しいホストキーを生成する特定のホストがあり、正当な理由で1日に数回再起動する場合、これは有効なアプローチとなる場合があります。

Host <your problematic Host>
  StrictHostKeyChecking no
61
Sami Laine

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証明書認証 を検討できます。

38
MattB

サーバーを再インストールして識別が変更された場合は、/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を使用します。このようにして、両方のサーバーが異なるホストキーを持つことができます。

5
etagenklo

一部の人々はそれが正しくないと言います、あなたはこれを行う必要はありませんなど、しかし私はまた、何度も何度も組み込みデバイスをテストするためにこれが必要です。 StrictHostKeyChecking=noを無効にする必要があります。これは正しいことですが、既知のホストファイルを/dev/nullにリセットすることもできます。ここでは、自動ログインとリモートデバイス上のpsの例を示します。

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@Host 'ps ax'
2
eddso

-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"
2
Jose Sa