使用 JSch 连接到 VShell 时出现“1024 到 1024 之间没有合适的素数可用”

问题描述 投票:0回答:2

我已经使用 JSch 编写了一个客户端(通过基于用户名密码的日志记录)。

以下是相关代码行:-

sshSession = jsch.getSession(userName, host, 22);
sshSession.setConfig("PreferredAuthentications", "password");
sshSession.setPassword(loginInfo);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
sshSession.setConfig(config);
sshSession.connect();

现在在连接 VShell 服务器时出现以下错误:-

com.jcraft.jsch.JSchException: SSH_MSG_DISCONNECT: 11 No appropriate prime between 1024 and 1024 is available.  en
at com.jcraft.jsch.Session.read(Session.java:987)
at com.jcraft.jsch.Session.connect(Session.java:323)
at com.jcraft.jsch.Session.connect(Session.java:183)
at com.informatica.isp.autoprovision.APSSHClient.<init>(APSSHClient.java:65)
at com.informatica.isp.autoprovision.APClient.createAPComputeNode(APClient.java:84)
at com.informatica.isp.autoprovision.test.AWSMockClientTest.test(AWSMockClientTest.java:34)
at com.informatica.isp.autoprovision.test.AWSMockClientTest.main(AWSMockClientTest.java:42)

当我尝试使用 VShell 服务器连接 CLI 客户端(如 PuTTY 或 xshell)时,它可以工作。 JSch 中是否有我缺少的设置?我在 VShell 或 JSch 论坛中找不到类似的内容,因此在此发布。

java ssh jsch
2个回答
2
投票

这可能是您的 JSCH 库版本的限制,可能不允许它与 1024 位素数以外的任何内容成功执行密钥交换。考虑联系 JCraft,看看他们是否有可用的版本,支持使用更大的素数进行 diffie-hellman 群交换。如果不这样做,请联系您的 VShell 管理员并询问他们是否愿意修改 VShell 4.1.1+ primes.txt 文件以包含 1024 位素数。

作为 logjam 研究的一部分,当使用 1024 位和更小的素数时,diffie-hellman 组交换中存在潜在的漏洞。

来自 VShell 4.1.1 历史文件:“鉴于 SSH 密钥交换的潜在漏洞,类似于 TLS Logjam 漏洞,默认情况下不再启用 diffie-hellman group1 密钥交换算法,并且所有 1024 位primes 已从 VShell 的 primes.txt 文件中删除。”


1
投票

谷歌搜索错误消息,我发现(链接现在已失效)

已知此问题是由 VShell 具有空 primes.txt 文件并使用 diffie-hellman 组交换引起的。

作为 SecureFX 客户端的解决方法,您可以将 diffie-hellman 移至“会话选项”/“连接”/“SSH2”/“密钥交换”中的列表顶部,看看是否能够解决该错误?

检查服务器上是否有

primes.txt

或者尝试使用

选择另一种密钥交换算法
config.put("kex", <preference list>);
© www.soinside.com 2019 - 2024. All rights reserved.