我已经使用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 Server连接时,出现以下错误:
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位素数以外的任何事物成功执行密钥交换。考虑联系JCraft,以查看他们是否有可用的版本,以支持使用更大的素数进行diffie-hellman组交换。如果没有,请与您的VShell管理员联系,询问他们是否愿意修改VShell 4.1.1+ primes.txt文件以包含1024位素数。
作为logjam research的一部分,当使用1024位及更小的素数时,diffie-hellman组交换中可能存在漏洞。
从VShell 4.1.1 history file:“鉴于SSH密钥交换存在潜在的漏洞,类似于TLS Logjam漏洞,diffie-hellman group1密钥交换算法在默认情况下不再启用,并且所有1024位素数都具有已从VShell的primes.txt文件中删除。”