ssh 無法協商 - 找不到匹配的密鑰交換方法
我正在嘗試登錄我的 DSL 路由器,因為我遇到了命令行郵件問題。我希望能夠重新配置路由器。
當我發出
ssh
命令時,會發生以下情況:$ ssh enduser@10.255.252.1 Unable to negotiate with 10.255.252.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
所以然後我查看了這個 stackexchange 文章,並將我的命令修改為這個,但我遇到了一個不同的問題,這次是密碼。
$ ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 enduser@10.255.252.1 Unable to negotiate with 10.255.252.1 port 22: no matching cipher found. Their offer: 3des-cbc
那麼有沒有提供
3des-cbc
加密的命令?我不確定 3des,比如我是否想將它永久添加到我的系統中。是否有允許
3des-cbc
密碼的命令?這裡有什麼問題?它不要求輸入密碼。
在設置加密通道時會發生此特定錯誤。如果您的系統和遠端系統不共享至少一個密碼,則沒有密碼可以達成一致,也沒有加密通道是可能的。通常 SSH 伺服器會提供少量不同的密碼來滿足不同的客戶端;我不確定為什麼您的伺服器將配置為僅允許 3DES-CBC。
現在,3DES-CBC 並不可怕。它很慢,而且它提供的安全性低於其他一些算法,但只要正確選擇密鑰,它就不會立即被破解。當密文可以在傳輸過程中修改時,CBC 本身存在一些問題,但我強烈懷疑由此產生的損壞會被 SSH 的 HMAC 拒絕,從而減少影響。最重要的是,有比 3DES-CBC 更差的選擇,也有更好的選擇。但是,**在覆蓋與安全相關的預設值(包括密碼和密鑰交換算法選擇)時,請務必小心行事。**這些預設值是有原因的預設值;一些非常聰明的人在考慮這些選項時花費了一些腦力,並確定選擇的預設值提供了最佳的整體安全性與性能權衡。
如您所見,您可以使用
-c ...
(或-oCiphers=...
)指定從客戶端提供的密碼。在這種情況下,添加-c 3des-cbc
只允許來自客戶端的 3DES-CBC。由於這與伺服器提供的密碼相匹配,因此可以建立加密通道,並且連接會進入身份驗證階段。您也可以將此添加到您的個人
~/.ssh/config
. 為了避免為了解決局部問題而進行全域更改,您可以將其放在一個Host
節中。例如,如果您的 SSH 配置目前顯示(虛擬範例):Port 9922
指定全域預設埠 9922 而不是預設埠 22,您可以為需要特殊配置的主機添加一個主機節,並為預設情況添加一個全域主機節。那會變成……
Host 10.255.252.1 Ciphers 3des-cbc KexAlgorithms +diffie-hellman-group1-sha1 Host * Port 9922
縮進是可選的,但我發現它大大提高了可讀性。空白行和以 開頭
#
的行將被忽略。如果您總是(或大部分)在該系統上以同一使用者身份登錄,您還可以指定該使用者名:
Host 10.255.252.1 Ciphers 3des-cbc KexAlgorithms +diffie-hellman-group1-sha1 User enduser Host * Port 9922
Host *
如果您的 ~/.ssh/config 中沒有任何內容,則不需要添加節,因為在這種情況下,只有編譯入或系統範圍的預設值(通常來自 /etc/ssh/ssh_config)將是用過的。至此,連接本主機的 ssh 命令行簡化為
$ ssh 10.255.252.1
和您系統上的所有其他使用者以及從您的系統到所有其他主機的連接都不受這些更改的影響。