2 回答
TA贡献1842条经验 获得超12个赞
问题是......服务器只愿意通过 diffie-hellman-group1-sha1 进行对话
和:
golang/go 问题 2903 : ssh: 添加 diffie-hellman-group1-sha1,已于 6 天前关闭
golang/go/issue 17230 : 提案:
x/crypto/ssh
: 支持 RFC 4419 中的 Diffie-Hellman Group Exchange,现已实施。
因此,您的客户端需要一个 的分支 golang.org/x/crypto/ssh
,例如Bored-engineer/ssh,其中提交 39a91b和提交 fe5e4ff确实添加了对 diffie-hellman-group1-sha1 的支持。
或者安装最新的golang/crypto
,其中包括提交 57b3e21。
TA贡献1831条经验 获得超4个赞
恐慌有些奇怪。显然,当无法就密钥交换算法达成一致时,就会出现问题。Diffie-Hellman密钥交换是最近才添加的(6 月 3 日)。由于您的服务器仅提供该算法,因此如果没有它,您将无法开始。
这不是恐慌的原因(恐慌似乎发生在ssh.Dial
其内部),但我会注意到,当你这样做时:
SSHConfig.Config.Ciphers = append(SSHConfig.Config.Ciphers, "diffie-hellman-group1-sha1")
您最终告诉 Go 代码仅使用 diffie-hellman-group1-sha1 作为通道加密。您无需在此处添加任何内容。原因是SSHConfig.Config.Ciphers
最初为零。所以你不妨这样写:
SSHConfig.Config.Ciphers = []string{"diffie-hellman-group1-sha1"}
以获得相同的效果,即:事情不起作用。
您可以在添加到列表之前调用SetDefaults
以使列表非空,但是如果没有此模式的实现,则添加到列表是无效的 - 即使使用新的提交,也不允许 Diffie-Hellman 进行其他任何操作比密钥交换本身。请注意,ssh.Dial
调用ssh.NewClientConn
,以以下内容开头:
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
它首先表示如果未设置配置Ciphers,则应使用默认值,然后立即过滤掉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.
该短语不在文档中。它应该是! 未包含的密码不受支持,也不会进行协商,即使在ClientConfig.Crypto.Ciphers.
TA贡献1900条经验 获得超5个赞
Diffie-hellman-group1-sha1 是一种密钥交换算法。Config 结构中应该是 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,则使用的默认算法可以在 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 关注
- 239 浏览
添加回答
举报