0

我使用“net.schmizz.sshj.SSHClient”包连接到服务器。下面是我的代码:

public class ConnectToServer {
    String hostName = "10.250.176.6";
    int port = 22;
    public ConnectToServer(String hostName, int port) {
        this.hostName = hostName;
        this.port = port;
    }

    public void ssh() {
      SSHClient ssh = new SSHClient();
      String cmd = "ipconfig";
      try {
            ssh.connect(this.hostName, this.port);
            ssh.isConnected();
            final Process process = Runtime.getRuntime().exec(cmd);
            ssh.disconnect();
      } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
      }

    }

但是,我遇到了一个错误:“线程中的异常”阅读器“java.lang.NoClassDefFoundError:org/bouncycastle/crypto/ec/CustomNamedCurves ”。我将 bcprov-jdk15on-1.49 和 bouncycastle.jar 添加到我的类路径中。请帮我解决这个错误。

完全例外:

    08:46:05.526 [main] DEBUG net.schmizz.concurrent.Promise - Awaiting  <<kex done>> 
    08:46:05.528 [reader] DEBUG    n.s.sshj.transport.KeyExchanger - Received SSH_MSG_KEXINIT   
    08:46:05.528 [reader] DEBUG n.s.sshj.transport.KeyExchanger -    Negotiated algorithms: [ kex=curve25519-sha256@libssh.org;    sig=ecdsa-sha2-nistp256; c2sCipher=aes128-ctr; s2cCipher=aes128-ctr; c2sMAC=hmac-sha1; s2cMAC=hmac-sha1; c2sComp=none; s2cComp=none ]    
    **Exception in thread "reader" java.lang.NoClassDefFoundError:    org/bouncycastle/crypto/ec/CustomNamedCurves**    
    at    net.schmizz.sshj.transport.kex.Curve25519DH.getCurve25519Params(Curve25519DH.java:60)
        at    net.schmizz.sshj.transport.kex.Curve25519SHA256.initDH(Curve25519SHA256.java:44)
        at    net.schmizz.sshj.transport.kex.AbstractDHG.init(AbstractDHG.java:46)
        at    net.schmizz.sshj.transport.KeyExchanger.gotKexInit(KeyExchanger.java:236)
        at    net.schmizz.sshj.transport.KeyExchanger.handle(KeyExchanger.java:356)
        at    net.schmizz.sshj.transport.TransportImpl.handle(TransportImpl.java:503)
        at net.schmizz.sshj.transport.Decoder.decode(Decoder.java:102)  
    at       net.schmizz.sshj.transport.Decoder.received(Decoder.java:170)      at  net.schmizz.sshj.transport.Reader.run(Reader.java:59) 
Caused by:    java.lang.ClassNotFoundException:    org.bouncycastle.crypto.ec.CustomNamedCurves     
    at    java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at    java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at    sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)     
at    java.lang.ClassLoader.loadClass(ClassLoader.java:357)
4

3 回答 3

0

由于在项目中使用了不同版本的 bouncycastle jar,可能会出现此问题。解决方案是,

  1. 找到在项目中直接或间接使用的不同版本的 bouncycastle jar。
  2. 尝试在整个项目中使用一种版本的 bouncycastle jars。
  3. 根据您选择在项目中使用的版本进行更改,因为使用一个版本的 bouncycastle jar 编写的代码可能不适用于其他版本的 bouncycastle。
于 2021-06-28T13:49:21.210 回答
0

您的 jar 可能缺少它的依赖项(或其中一些)。如果它是一个 Maven 项目,我建议您宁愿切换到 Maven。

一个很好的教程可以在这里找到:Maven in 5 Minutes

我认为,SSH 客户端缺少 org.Bouncycastle.crypto 作为库(依赖项)。解决此问题的快速方法是也为它获取罐子。

于 2018-10-04T09:47:31.990 回答
-2

清理您的项目或重新构建它。如果问题没有解决,请发布完整的异常,以便我们更加清楚。

于 2018-10-04T09:43:33.577 回答