我正在从 Mac OS X 系统连接到 Linux 服务器。我已经设置了 RSA 公钥访问,因此我只需输入
ssh [hostname]
无需密码即可连接。
尝试连接 x2go 远程桌面客户端时出现错误:
kex error : did not find one of algos diffie-hellman-group1-sha1 in list [email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1 for kex algos
我的 Mac OS X 系统比较旧,运行的是 Snow Leopard 10.6.8。Linux 系统相当新。ssh -v 报告的版本是
OpenSSH_5.2p1, OpenSSL 0.9.8y 5 Feb 2013
我听说这个 kex 错误可能表示客户端和服务器上的加密算法不匹配。但为什么 ssh 成功而 x2go 失败?我可以让 x2go 执行 ssh 所做的一切以成功登录吗?部分问题在于 x2go 不报告事件顺序(与 ssh -v 不同),所以我不确定它到底试图做什么。如果有办法让它显示详细的日志,那将会很有用。
答案1
是的,这是密钥交换算法不匹配。(这与您这边的“公钥登录”无关。它们是完全独立的阶段。)
问题来自于:
X2go 捆绑了一个质量较差的 SSH 客户端库,它甚至没有实现必需的SSH v2 规范的部分内容(我发现了一个X2go 错误报告关于这种情况),以及
盲目地遵循一些博客文章(可能是“安全外壳”?)的说明,以将 SSH 服务器限制为密钥交换算法的非常小的子集,而 X2go 客户端库不支持这些算法。
通常,使用 libssh 等库进行 SSH 连接是可以的——使用库函数比在后台处理命令更方便一些/usr/bin/ssh
。但是,您系统上的 X2go 使用的是 libssh 的非常旧版本——它只实现了diffie-hellman-group1-sha1
,但没有实现diffie-hellman-group14-sha1
,尽管RFC 4253 要求。
(不同之处在于“group1”(Oakley Group 2 [原文如此])使用 1024 位 DH 参数,即不再足够安全(而第 14 组则使用 2048 位参数。)
你说你的 Linux 系统“相当新”。说到加密软件,那就是差远了– 最新的 OpenSSH 是 7.1(您的版本已有 6 年历史),最新的 OpenSSL 是 1.0.2d(您的版本已有 2 年历史),最新的 libssh 是 0.7.2(您的版本……很旧)。
所以最好的解决办法是安装最新版本的 libssh,它支持更多种类的密钥交换算法(例如相同的
[email protected]
)。但是,它可能需要至少 OpenSSL 1.0.x 才能支持椭圆曲线算法。因此,如果您使用较旧的 Linux 发行版,这可能会很麻烦……另一种方法是白名单
diffie-hellman-group1-sha1
在您的服务器的 KexAlgorithms 列表中,与当前列出的 KexAlgorithms 列表一起。这将导致相对较弱的 X2go 连接 - 足以对抗您的邻居,但可能对抗三字母代理。不过,您仍在使用 2009 年的 OpenSSH 版本,所以这对您来说可能并不重要。
答案2
我遇到了这个问题,但令人惊讶的是,它与任何 SSH 配置文件都无关。带密码的 SSH 可以正常工作,X2GO 不会解释失败的原因:我的密码很复杂,以“°”符号开头。将我的密码更改为简单的字符串进行测试,然后:X2GO 就可以正常工作了。似乎 X2GO 的密码字段不喜欢特殊字符