SVNKit Trilead SSH报错:无法协商提案不匹配,Eclipse无法通过SSH连接SVN
Eclipse SVN SSH连接故障解决方案
问题说明
近期出于安全考虑调整了SVN服务器的sshd_config配置文件后,Eclipse无法通过SSH连接SVN。原因是SVNKit依赖的Trilead库支持的全部密钥交换算法和消息认证码算法都已从服务器sshd_config的可选配置中移除,且无法回退配置。
手动修改Trilead库的尝试未成功,该库相关类注释极少,逻辑难以梳理,报错堆栈如下:
Caused by: java.io.IOException: Key exchange was not finished, connection is closed. at com.trilead.ssh2.transport.KexManager.getOrWaitForConnectionInfo(KexManager.java:92) at com.trilead.ssh2.transport.TransportManager.getConnectionInfo(TransportManager.java:231) at com.trilead.ssh2.Connection.connect(Connection.java:769) ... 40 more Caused by: java.io.IOException: Cannot negotiate, proposals do not match. at com.trilead.ssh2.transport.KexManager.handleMessage(KexManager.java:413) at com.trilead.ssh2.transport.TransportManager.receiveLoop(TransportManager.java:765) at com.trilead.ssh2.transport.TransportManager$1.run(TransportManager.java:480) at java.base/java.lang.Thread.run(Thread.java:834)
可行解决办法
- 更换Eclipse SVN连接器:放弃默认的SVNKit连接器,改用Native JavaHL连接器。JavaHL直接调用本地安装的SVN客户端的SSH能力,不受Trilead库支持的加密算法限制,只需本地SVN客户端版本适配服务器加密规则即可。配置路径:Eclipse → 偏好设置 → Team → SVN → SVN接口,选择对应JavaHL版本即可。
- 本地搭建SSH隧道:本地启动SSH隧道映射服务器SVN端口,将原
svn+ssh://形式的仓库地址改为svn://localhost:映射端口/仓库路径访问,本地SSH客户端支持服务器配置的加密算法即可完成握手,无需调整Eclipse SVN插件配置。 - 升级SVNKit版本:如果当前使用的是1.9.x及以下版本的SVNKit,可尝试升级到1.10.x及以上版本,高版本SVNKit已适配更多新的密钥交换和MAC算法,部分场景下可直接兼容服务器的加密配置。
内容的提问来源于stack exchange,提问作者THolden
相关产品推荐
相关产品推荐

