リモートサーバーのECDSAキーを確認すると、SSHクライアントは「known_hosts」ファイルの代わりに「/dev/null」を確認するように見えます。

リモートサーバーのECDSAキーを確認すると、SSHクライアントは「known_hosts」ファイルの代わりに「/dev/null」を確認するように見えます。

known_hostsSSHを使用すると、なぜ私のファイルが正しくスキャンされないのか疑問に思います。簡単に言えば、私の考えでは、私のSSHクライアントがファイル以外のものを/dev/nullチェックしているようです。known_hosts私がどのように推測したかについての詳細は、以下に記録されています。

mars私の例では、名前付きノードから名前付きクライアントノードとしてログインしますsaturnsaturn公開鍵と秘密鍵を設定した後は入力できますが、次の警告が表示されます。

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_hostsSSHクライアントを使用するときにファイルが正しくチェックされていないかどうか疑問に思ったので、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を使用しました。詳細をオンにしましたが、ログメッセージの一部のみが表示されます。ログインから提供まで:neptuneWarning: Permanently addedearthneptune

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_hostsknown_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推測を確認するだけです。 (そしてそれぞれの検証は費用がかかるため、多数の潜在的なサーバー名を無差別に代入することはできません。)

関連情報