Ssh

檢查遠端伺服器的 ECDSA 密鑰時,SSH 客戶端似乎正在檢查“/dev/null”而不是“known_hosts”文件

  • October 9, 2020

我想知道為什麼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 客戶端時是否沒有正確檢查文件,所以使用詳細標誌登錄以檢查哪裡出了問題。下面是截斷的輸出:

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.

我想看看“好的”行為是什麼樣的,所以我在另一對伺服器(這裡命名為earthand neptune)上使用了 SSH,我已經知道它不會給我Warning: Permanently added消息。我已經打開了詳細資訊,我只顯示了一部分日誌消息。從earthto登錄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在這個“好”場景中找到密鑰的另一個確認:

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

提前感謝您的幫助。

唯一想到的解釋是這台機器上或此帳戶上的SSH 客戶端配置已被修改為不記住文件中的已知公鑰known_hosts。檢查GlobalKnownHostsFileUserKnownHostsFile/etc/ssh/ssh_config的設置/etc/ssh/ssh_config.d/*~/.ssh/config

這樣做可能是為了增加隱私,以便機器上的其他管理員(或將來設法破壞機器或其備份的人)無法看到您連接的位置,除非他們監視連接。對於該known_hosts文件,這不是隱私和安全之間的很好折衷:每次都必須手動檢查對等方的公鑰很容易出錯(除了不方便之外)。啟用該HashKnownHosts選項可提供相當多的隱私和相當多的功能:啟用此選項後,無法直接列出known_hosts文件中的條目,您所能做的就是猜測條目可能是什麼並檢查您的猜測(並且每次檢查都有些昂貴,因此您不能暴力破解大量潛在的伺服器名稱)。

引用自:https://unix.stackexchange.com/questions/613585