ssh-keyscan 到 known_hosts 不產生任何結果
當我執行時:
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
“使用者名”是執行上述命令的使用者名。這給我留下了以下問題:
- 我的 ssh-keyscan 輸出傳達/意思是什麼?我希望這裡有 |1|weofijgojw = sshkey 字元串。
- 為什麼無論如何都沒有寫入 ~/.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
會有的,那何必呢?