【问题标题】:net.schmizz.sshj.transport.TransportException: Unable to reach a settlementnet.schmizz.sshj.transport.TransportException:无法达成和解
【发布时间】:2014-08-22 13:21:04
【问题描述】:

我正在尝试使用 SSHJ 将 ssh 连接到其他机器。下面的 PFA 代码(排除 try/catch/finally 块)。

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
final SSHClient sshClient = new SSHClient();
sshClient.addHostKeyVerifier(new PromiscuousVerifier());
sshClient.connect("test-hostname");
sshClient.authPublickey("test-user", private_key_path);
Session session = sshClient.startSession();
Session.Command cmd = session.exec(TEST_SSH_COMMAND);
cmd.join(5, TimeUnit.SECONDS);
if(cmd.getExitStatus() == 0) {
   System.out.println("Success");
}

当我尝试执行上述程序时,出现以下错误

[reader] n.s.sshj.transport.TransportImpl - Dying because -net.schmizz.sshj.transport.TransportException: Unable to reach a settlement: [] and [aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, aes192-cbc, aes256-cbc, arcfour, rijndael-cbc@lysator.liu.se]
2014-07-01 20:45:09,021 INFO  [reader] n.s.sshj.transport.TransportImpl - Disconnected - UNKNOWN
2014-07-01 20:45:09,023 ERROR [pool-3-thread-1] net.schmizz.concurrent.Promise - <<kex done>> woke to: net.schmizz.sshj.transport.TransportException: Unable to reach a settlement: [] and [aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, aes192-cbc, aes256-cbc, arcfour, rijndael-cbc@lysator.liu.se]

2014-07-01 20:45:09,024 信息 [pool-3-thread-1] n.s.sshj.transport.TransportImpl - 已断开连接 - BY_APPLICATION

谁能帮我调试一下这个问题。

谢谢。

【问题讨论】:

  • 你得到这个答案了吗?我也遇到同样的错误
  • 不,我没有得到任何答复。我开始使用 JSch,它运行良好。
  • 你能把相同的 Jsch 客户端代码粘贴到这里吗?我需要紧急修复它。这将是一个很大的帮助!
  • 我在下面粘贴了JSch客户端代码供您参考。

标签: java sshj


【解决方案1】:

我遇到了同样的问题,这是一个类加载问题。另一个库 (winzipaes) 依赖于另一个版本 auf Bouncycastle (bcprov-jdk16),这似乎与 SSHJ 引用的 jdk15 版本有冲突。

明确排除 jdk16 版本对我有帮助(但是我还没有测试使用 winzipaes 的代码)。

【讨论】:

    【解决方案2】:

    我在部署 Cloudera 集群时遇到了同样的问题。确保支持的MACs 的客户端和服务器集具有非空交集。

    例如我得到:

    net.schmizz.sshj.transport.TransportImpl: Dying because - net.schmizz.sshj.transport.TransportException: Unable to reach a settlement: [hmac-sha1, hmac-sha1-96, hmac-md5, hmac-md5-96] and [hmac-sha2-512-etm@openssh.com, hmac-sha2-256-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-512, hmac-sha2-256, hmac-ripemd160]
    

    解决方法是将至少一个客户端 MAC 添加到服务器支持的 MAC。在带有SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2 的Ubuntu 14.04.2 LTS 上,只需在/etc/ssh/sshd_config 中编辑MACs

    不太确定这里的安全含义,即某些方法可能会因为弱而被劝阻,但你明白了,客户端和服务器需要解决一个问题。还要注意,是客户端做出选择,服务器会适应。

    别忘了重启服务器(Ubuntu同上):service ssh restart

    【讨论】:

      【解决方案3】:

      我无法找到任何解决此问题的方法。相反,我开始使用 JSch,它现在工作正常。

      java.util.Properties config = new java.util.Properties();
      config.put("StrictHostKeyChecking", "no");
      
      Session session = null;
      ChannelExec channel = null;
      
          try {
                  JSch jSch = new JSch();
                  jSch.addIdentity("/tmp/privatekey");
      
                  session = jSch.getSession("testuser", address, 22);
                  session.setConfig(config);
                  session.connect();
      
                  channel = (ChannelExec) session.openChannel("exec");
                  BufferedReader in = new BufferedReader(new InputStreamReader(channel.getInputStream()));
                  channel.setCommand(command);
                  channel.connect();
      
                  if (channel.getExitStatus() == 0 || channel.isClosed() || channel.isEOF()) {
                      logger.info("SSH connection is successful!");                    
                  }
                  in.close();
              } catch (JSchException jsche) {
                  logger.error("Trying to SSH to host: {} but got exception {}", address, jsche);                
              } finally {
                  if (channel != null) channel.disconnect();
                  if (session != null) session.disconnect();
              }
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      相关资源
      最近更新 更多