我已经使用 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 论坛中找不到类似的内容,因此在此发布。
最佳答案
这可能是您的 JSCH 库版本的限制,可能不允许它与 1024 位素数以外的任何内容成功执行 key 交换。考虑联系 JCraft,看看他们是否有可用的版本,支持使用更大的素数进行 diffie-hellman 群交换。如果不这样做,请联系您的 VShell 管理员并询问他们是否愿意修改 VShell 4.1.1+ primes.txt 文件以包含 1024 位素数。
作为僵局的一部分research使用 1024 位及更小的素数时,diffie-hellman 组交换存在潜在漏洞。
来自 VShell 4.1.1 history file :“鉴于 SSH key 交换存在潜在漏洞,类似于 TLS Logjam 漏洞,默认情况下不再启用 diffie-hellman group1 key 交换算法,并且所有 1024 位素数已从 VShell 的 primes.txt 文件中删除。 ”
关于java - 使用 JSch 连接到 VShell 时为 "No appropriate prime between 1024 and 1024 is available",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31660971/