问题
好吧,问题是我在 El Capitan 上使用 Pycharm。我正在尝试使用比 Pycharm 更新的密钥交换算法连接到具有严格登录 Kexalgorithms 的服务器似乎有能力使用...但这里有一个问题,我可以从终端登录,并且这个相同版本的 Pycharm 在 Ubuntu 14.04 上工作(我可以从那里登录)
我可以从终端成功使用 ssh 正常登录。
当我尝试使用 Pycharm 登录服务器时,收到错误“算法协商失败。
这是我的 /var/log/messages 中的一个条目
Jan 22 23:15:56 (none) auth.crit sshd[2520]: fatal: Unable to negotiate with 10.10.16.125: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1 [preauth]'
StackOverflow 上已经有人提出这个问题,但该人似乎通过添加选项来允许这个非常旧的 Diffie-Helman 版本到服务器上的 sshd_config 文件中来自己解决问题。
我无权将此 Diffie-Helman 的旧版本添加到 sshd_config
我以前在 Yosemite 上,认为升级可以解决这个问题,因为有较新的 ssh 和 openssl 版本,但这并没有解决问题。
笔记
- 在 Ubuntu 14.04 上使用相同版本的 Pycharm,我能够连接。所以看来Pycharm不是问题所在。
- 我能够从 Mac 上 ssh 进入服务器以获取该条目日志条目
问题
我是否需要为具有 ssh 功能的应用程序更新特定的 crypto 相关库才能使用这些新功能?
答案1
第一:你需要它做什么?难道sshfs
工作就不能做得更好吗?
你的问题恰恰相反。服务器提供老的(并且可能损坏)KeyExchange 方法:diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1
,在当前版本的 openssh 服务器中不再默认(该服务器是什么?如果您的系统管理员告诉您它是严格的和较新的,而不是事实),但应该为客户工作。
您应该尝试添加到~/.ssh/config
允许这些 Kex 方法的行:
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1
如果它对应用程序内的连接没有帮助,可能还有其他方法强制使用本地配置。
答案2
我花了一段时间才回到这里回答我自己的问题。
更新 Jsch 库
Pycharm 版本 4 包含一个有错误的库。此错误会阻止使用某些 SSH 密钥交换算法与基本 Diffie-Helman-group1* 密码以外的任何算法进行 SFTP 通信。因此,我们需要更新库以便 Pycharm 能够与我们的虚拟机进行通信。我们的虚拟机仅允许使用更现代的密钥,并阻止传统的 Diffie-Helman-group1* 密码。
Pycharm 4 有一个名为 Jsch 的 java 库的过时版本,它用于与 SFTP 通信(传输帮助程序文件需要它)。要解决这个问题,我们只需要更新库即可。
更新后的库可在 sourceforge 上找到,位于:http://sourceforge.net/projects/jsch/files/jsch.jar/0.1.53/
受影响的版本
- Mac:Pycharm <= 5
- Windows:Pycharm <= 5
- Linux:Pycharm < 4? (linux上4.04不存在这个bug)
下载步骤
- 从此页面(顶部)下载 Jsch 的副本。
- 删除旧版本:jsch-0.1.51.jar sudo rm /Applications/PyCharm.app/Contents/lib/jsch-0.1.51.jar
- 复制新库 pycharm 目录:/Applications/PyCharm.app/Contents/lib cp ~/Downloads/jsch-0.1.53.jar /Applications/PyCharm.app/Contents/lib/。
- 重启Pycharm
笔记:这个问题已在 Pycharm 5 中修复,并且更新为我的同事修复了它,但如果您有其他基于 java 的应用程序,这可能会对您有所帮助。
笔记:我最终通过挖掘 Pycharm 的日志发现了这一点。我可以看到有关该库的问题,并进行了一些谷歌搜索,然后我在 sourceforge 上找到了该库。