2 回答

TA貢獻(xiàn)1842條經(jīng)驗 獲得超13個贊
問題是......服務(wù)器只愿意通過 diffie-hellman-group1-sha1 進(jìn)行對話
和:
golang/go 問題 2903 : ssh: 添加 diffie-hellman-group1-sha1,已于 6 天前關(guān)閉
golang/go/issue 17230 : 提案:
x/crypto/ssh
: 支持 RFC 4419 中的 Diffie-Hellman Group Exchange,現(xiàn)已實施。
因此,您的客戶端需要一個 的分支 golang.org/x/crypto/ssh
,例如Bored-engineer/ssh,其中提交 39a91b和提交 fe5e4ff確實添加了對 diffie-hellman-group1-sha1 的支持。
或者安裝最新的golang/crypto
,其中包括提交 57b3e21。

TA貢獻(xiàn)1831條經(jīng)驗 獲得超4個贊
恐慌有些奇怪。顯然,當(dāng)無法就密鑰交換算法達(dá)成一致時,就會出現(xiàn)問題。Diffie-Hellman密鑰交換是最近才添加的(6 月 3 日)。由于您的服務(wù)器僅提供該算法,因此如果沒有它,您將無法開始。
這不是恐慌的原因(恐慌似乎發(fā)生在ssh.Dial
其內(nèi)部),但我會注意到,當(dāng)你這樣做時:
SSHConfig.Config.Ciphers?=?append(SSHConfig.Config.Ciphers,?"diffie-hellman-group1-sha1")
您最終告訴 Go 代碼僅使用 diffie-hellman-group1-sha1 作為通道加密。您無需在此處添加任何內(nèi)容。原因是SSHConfig.Config.Ciphers
最初為零。所以你不妨這樣寫:
SSHConfig.Config.Ciphers?=?[]string{"diffie-hellman-group1-sha1"}
以獲得相同的效果,即:事情不起作用。
您可以在添加到列表之前調(diào)用SetDefaults
以使列表非空,但是如果沒有此模式的實現(xiàn),則添加到列表是無效的 - 即使使用新的提交,也不允許 Diffie-Hellman 進(jìn)行其他任何操作比密鑰交換本身。請注意,ssh.Dial
調(diào)用ssh.NewClientConn
,以以下內(nèi)容開頭:
fullConf := *config
fullConf.SetDefaults()
SetDefaults依次在這里并包含:
if c.Ciphers == nil {
? ? c.Ciphers = preferredCiphers
}
var ciphers []string
for _, c := range c.Ciphers {
? ? if cipherModes[c] != nil {
? ? ? ? // reject the cipher if we have no cipherModes definition
? ? ? ? ciphers = append(ciphers, c)
? ? }
}
c.Ciphers = ciphers
它首先表示如果未設(shè)置配置Ciphers,則應(yīng)使用默認(rèn)值,然后立即過濾掉cipherModes. 這又在此處定義并以此注釋開頭:
// cipherModes documents properties of supported ciphers. Ciphers not included
// are not supported and will not be negotiated, even if explicitly requested in
// ClientConfig.Crypto.Ciphers.
該短語不在文檔中。它應(yīng)該是! 未包含的密碼不受支持,也不會進(jìn)行協(xié)商,即使在ClientConfig.Crypto.Ciphers.

TA貢獻(xiàn)1900條經(jīng)驗 獲得超5個贊
Diffie-hellman-group1-sha1 是一種密鑰交換算法。Config 結(jié)構(gòu)中應(yīng)該是 KeyExchanges 而不是 Ciphers
SSHConfig.Config.KeyExchanges = append(SSHConfig.Config.KeyExchanges, "diffie-hellman-group1-sha1")
代替
SSHConfig.Config.Ciphers = append(SSHConfig.Config.Ciphers, "diffie-hellman-group1-sha1")
如果未指定 KeyExchanges,則使用的默認(rèn)算法可以在 ssh/common.go 中找到
// preferredKexAlgos specifies the default preference for key-exchange algorithms
// in preference order.
var preferredKexAlgos = []string{
kexAlgoCurve25519SHA256,
kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521,
kexAlgoDH14SHA1,
}
可以看到,此時 kexAlgoDH1SHA1 或 diffie-hellman-group1-sha1 并未列出
- 2 回答
- 0 關(guān)注
- 349 瀏覽
添加回答
舉報