known_hosts
SSHを使用すると、なぜ私のファイルが正しくスキャンされないのか疑問に思います。簡単に言えば、私の考えでは、私のSSHクライアントがファイル以外のものを/dev/null
チェックしているようです。known_hosts
私がどのように推測したかについての詳細は、以下に記録されています。
mars
私の例では、名前付きノードから名前付きクライアントノードとしてログインしますsaturn
。saturn
公開鍵と秘密鍵を設定した後は入力できますが、次の警告が表示されます。
root@mars# ssh saturn
Warning: Permanently added 'saturn,10.30.3.3' (ECDSA) to the list of known hosts.
ログアウトして同じノードにログインすると、saturn
同じ警告メッセージが表示されます。ログアウトしてから再度ログインしても、このメッセージが表示されます。私は警告を抑制したくありません。なぜこのような警告が表示され続けるのだろうか。次の手順を実行して、ノードknown_hosts
のファイルにECDSAキーがmars
あることを確認しましたが、エラーが発生しました。saturn
# ssh-keygen -F saturn
do_known_hosts: hostkeys_foreach failed: No such file or directory
known_hosts
SSHクライアントを使用するときにファイルが正しくチェックされていないかどうか疑問に思ったので、verboseフラグでログインして何が間違っているかを確認しました。以下は切り捨て出力です。
root@mars# ssh -vvv saturn
.
.(truncated)
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:nkvxyuLtlDdO8pAycafcfqSPE7OUWgN6Z++Aia/Cygg
debug3: hostkeys_foreach: reading file "/dev/null"
debug3: hostkeys_foreach: reading file "/dev/null"
Warning: Permanently added 'saturn,10.33.3.3' (ECDSA) to the list of known hosts.
.
.(truncated)
したがって、私のSSHクライアントmars
は/dev/null
。/root/.ssh/known_hosts
私は、「良い」動作が何であるかを確認したかったので、そのメッセージを提供しないことを既に知っている他のサーバーペア(ここでearth
と呼ばれる)でSSHを使用しました。詳細をオンにしましたが、ログメッセージの一部のみが表示されます。ログインから提供まで:neptune
Warning: Permanently added
earth
neptune
root@earth# ssh -vvv neptune
.
. (truncated)
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:qo7vcBwG53p/9MlaTIQJbMZ8Wgf6QxiCJLR1jUiblQ8
debug3: hostkeys_foreach: reading file "/root/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /root/.ssh/known_hosts:9
debug3: load_hostkeys: loaded 1 keys from saturn
debug3: hostkeys_foreach: reading file "/root/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /root/.ssh/known_hosts:3
debug3: load_hostkeys: loaded 1 keys from 10.33.9.10
debug1: Host 'neptune' is known and matches the ECDSA host key.
debug1: Found key in /root/.ssh/known_hosts:9
.
.(truncated)
上から見るとearth
正しい小切手を見ることができます/root/.ssh/known_hosts
。known_hosts
この「良い」シナリオでキーを見つけたというもう1つの確認は次のとおりです。
root@earth# ssh-keygen -F neptune
# Host neptune found: line 7
Warning
とにかく、このメッセージが表示され続ける理由と、SSHクライアントが実際に確認していますが、/dev/null
そうでないことを知っている人はいますかknown_hosts
?私の推測が正しい場合は、このメッセージが再び表示されないようにクライアントを変更するにはどうすればよいですか?
すべてのノードでUbuntu 18.04と次のSSHクライアントバージョンを使用しています。
root@mars:~# ssh -V
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
助けてくれてありがとう。
答え1
私が考えることができる唯一の説明はSSH クライアントの構成このコンピュータまたはこのアカウントは、ファイルの既知の公開鍵を覚えていないように修正されましたknown_hosts
。設定を確認GlobalKnownHostsFile
してUserKnownHostsFile
無効にします。/etc/ssh/ssh_config
/etc/ssh/ssh_config.d/*
~/.ssh/config
これは、コンピュータの他の管理者(または将来コンピュータまたはバックアップを破損する人)が接続を監視しない限り、あなたが接続されている場所を表示できないようにプライバシーを強化するために行われます。ファイルの場合、known_hosts
これはプライバシーとセキュリティの間の良い妥協ではありません。毎回ピアの公開鍵を手動で確認する必要があるのは、エラーが発生しやすく不便です。このHashKnownHosts
オプションをオンにすると、かなりのプライバシーとかなりの機能が提供されます。このオプションをオンにすると、ファイル内の項目を直接一覧表示することはできません。項目が何であるかを推測し、known_hosts
推測を確認するだけです。 (そしてそれぞれの検証は費用がかかるため、多数の潜在的なサーバー名を無差別に代入することはできません。)