Ssh

ssh-keyscan 到 known_hosts 不產生任何結果

  • September 9, 2021

當我執行時:

ssh-keyscan -H 172.22.56.2

我得到以下輸出:

# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31

如果我再嘗試:

ssh-keyscan -H 172.22.56.2 >> ~/.ssh/known_hosts

不熟悉 ssh-keyscan 但相信我得到的輸出..不是我想要的,我還嘗試了 -t 的變體,例如:

ssh-keyscan -H -t rsa 172.22.56.2 >> ~/.ssh/known_hosts

所有的結果都是一樣的。該文件的權限是:

-rw-r--r-- 1 username username 886

“使用者名”是執行上述命令的使用者名。這給我留下了以下問題:

  1. 我的 ssh-keyscan 輸出傳達/意思是什麼?我希望這裡有 |1|weofijgojw = sshkey 字元串。
  2. 為什麼無論如何都沒有寫入 ~/.ssh/known_hosts ?沒有任何跡象表明問題已回饋給我/命令需要

提前感謝您的任何見解!

更新 1:

user@hostname:~$ ssh user@172.22.56.2
Unable to negotiate with 172.22.56.2 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

user@hostname:~$ ssh user@172.22.56.2 -oKexAlgorithms=+diffie-hellman-group1-sha1
Unable to negotiate with 172.22.56.2 port 22: no matching host key type found. Their offer: ssh-dss

user@hostname:~$ ssh user@172.22.56.2 -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-dss
Unable to negotiate with 172.22.56.2 port 22: no matching cipher found. Their offer: 3des-cbc

user@hostname:~$ ssh user@172.22.56.2 -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-dss -oCiphers=+3des-cbc

The authenticity of host '172.22.56.2 (172.22.56.2)' can't be established.
DSA key fingerprint is SHA256:HwdMfb3k5KwrwQkFIRe6ZXilbObYhNzLbwb0zvk2n8U.
Are you sure you want to continue connecting (yes/no/[fingerprint])? ^C

user@hostname:~$ ssh-keyscan -H 172.22.56.2
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31
# 172.22.56.2:22 SSH-2.0-RomSShell_4.31

添加“-vv”僅適用於 ssh 應用程序,而不適用於 ssh-keyscan,所以我沒有從中找到任何有用的東西。

從技術上講,最初提出的問題得到了回答,但這更多是因為我對調查缺乏完整的願景——在這一點上,真正的問題似乎是:

  • 當 ssh 到同一主機產生 SSH 密鑰提示時,為什麼 ssh-keyscan 不返回任何結果?

我應該打開一個新問題還是只是更改我原來的送出?謝謝!

(來自評論加更新)

問題是目標設備真的很糟糕,而且顯然(由 診斷ssh)只支持最近的 OpenSSH 不喜歡的舊且大部分過時的 SSH 選項。

首先,它只有一個 DSA(在 SSH 中也拼寫為 DSS)密鑰。ssh-keyscan預設情況下從未請求過 DSA 密鑰,儘管它請求的類型集有所不同,並且主要包括添加的其他新類型;這就是為什麼在沒有選項的情況下執行它會顯示 5 次嘗試——獲取設備沒有的密鑰類型。這部分可以通過指定來修復-t dsa

其次,它只支持用於 KEX 的 DH 組 1 和用於加密的 3des-cbc。儘管ssh不再認為組 1 是安全的並且需要-oKexAlgorithms=使用它的選項,但ssh-keyscan強制使用看起來像所有KEX 組的內容。但是,它不會更改ssh密碼的預設設置,因此ssh-keyscan在 OpenSSH 7.4 中應該仍然失敗。**如果你降級到 7.4 以下,我相信ssh-keyscan -t dsa會起作用。**當然,降級對安全性不利,因此您應該只在臨時猴子上執行此操作,例如隨後丟棄的虛擬機或容器。

或者,正如您所發現的,ssh 可以-o接受這些舊選項提供選項,因此它可以獲取主機密鑰並將其添加到known_hosts. 如果您只是為了避免互動,即自動化,請使用-oStrictHostKeyChecking=no(或accept-new在 7.6 中)在沒有提示的情況下執行此操作。如果您不希望將新密鑰直接放在文件中,也-oUserKnownHostsFile=可以將其放在其他位置 - 儘管一旦您這樣做了,對新文件唯一可能做的事情就是將它添加到known_hosts就像ssh會有的,那何必呢?

引用自:https://serverfault.com/questions/1075224