NoClassDefFoundError in 'new SSHClient.authPublickey(String ,KeyProvider)' 方法



我正在尝试将我的本地主机与 sshj 图书馆提供的课程联系起来,用于教育目的。所以我写了上面的代码,但new SSHClient.authPublickey(String userName,KeyProvider... keys)方法存在问题。我跟踪了代码的每一行,不仅跟踪了我的sshj库,但我找不到任何有用的东西。我给出了错误代码,从我的IDE(NetBeans 8.1)生成的堆栈跟踪,我的源代码和导入的jar到下面的项目中。

Jar 文件:(由于堆栈溢出信誉限制,我不能共享超过 2 个链接)

1 . sshj-0.2.3.jar

2 . SLF4J-API-1.7.21.jar 链接 = 二进制和源

3 . bcprov,bcpkix,bcpg,bcmail(JDK 1.5 - 1.8 版本文件)链接 = 签名罐部分

源代码 :

    SSHClient sshClient = new SSHClient();    
    sshClient.addHostKeyVerifier(new PromiscuousVerifier());
    sshClient.connect("localhost");
    File keyFile = new File(dir);//dir = directory of publickey file
    KeyProvider pubkey =  sshClient.loadKeys(keyFile.getPath(),pass);//pass = passphrase of the pubkey file
    sshClient.authPublickey(uName, pubkey); //error occuring in this line

错误代码 :

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/bouncycastle/openssl/PEMReader
    at net.schmizz.sshj.userauth.keyprovider.PKCS8KeyFile.readKeyPair(PKCS8KeyFile.java:114)
    at net.schmizz.sshj.userauth.keyprovider.PKCS8KeyFile.getPublic(PKCS8KeyFile.java:71)
    at net.schmizz.sshj.userauth.method.KeyedAuthMethod.putPubKey(KeyedAuthMethod.java:44)
    at net.schmizz.sshj.userauth.method.AuthPublickey.buildReq(AuthPublickey.java:62)
    at net.schmizz.sshj.userauth.method.AuthPublickey.buildReq(AuthPublickey.java:81)
    at net.schmizz.sshj.userauth.method.AbstractAuthMethod.request(AbstractAuthMethod.java:63)
    at net.schmizz.sshj.userauth.UserAuthImpl.tryWith(UserAuthImpl.java:236)
    at net.schmizz.sshj.userauth.UserAuthImpl.authenticate(UserAuthImpl.java:89)
    at net.schmizz.sshj.SSHClient.auth(SSHClient.java:204)
    at net.schmizz.sshj.SSHClient.authPublickey(SSHClient.java:304)
    at net.schmizz.sshj.SSHClient.authPublickey(SSHClient.java:323)
    at Main.SignInFuncts.auth(SignInFuncts.java:29)
    at Main.SignInFuncts.signIn(SignInFuncts.java:52)
    at Main.SignIn.buttonSignInActionPerformed(SignIn.java:118)
    at Main.SignIn.access$000(SignIn.java:6)
    at Main.SignIn$1.actionPerformed(SignIn.java:56)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6516)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6281)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4872)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747)
    at java.awt.EventQueue.access$300(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:706)
    at java.awt.EventQueue$3.run(EventQueue.java:704)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.awt.EventQueue$4.run(EventQueue.java:718)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:717)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.openssl.PEMReader
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

Stack Trace Line is sshClient.authPublickey(uName, pubkey)

SSH公司.java 1.分支

public void authPublickey(String username, KeyProvider... keyProviders)
            throws UserAuthException,
                   TransportException {
        authPublickey(username, Arrays.<KeyProvider>asList(keyProviders));

堆栈跟踪线是身份验证公钥(用户名, Arrays.asList(keyProviders));

SSH公司.java 2.分支

public void authPublickey(String username, Iterable<KeyProvider> keyProviders)
            throws UserAuthException,
                   TransportException {
        final List<AuthMethod> am = new LinkedList<AuthMethod>();
        for (KeyProvider kp : keyProviders)
            am.add(new AuthPublickey(kp));
        auth(username, am);

身份验证(用户名,上午);

SSHClient.java 3. 分支

public void auth(String username, Iterable<AuthMethod> methods)
            throws UserAuthException, TransportException {
        assert isConnected();
        auth.authenticate(username, (Service) conn, methods);//exception thrown at this line

我已经用没有密码的 ssh-keygen 生成了我的 ssh 公钥,我也有受密码保护的公共密钥。如果我尝试同样的事情,错误仍然相同。如果需要任何其他事情,我准备分享,请说出来。

你得到了一个org.bouncycastle.openssl.PEMReader ClassNotFoundError。这意味着在类路径上找不到 BouncyCastle 库。

它需要 PEMReader 读取您的公钥文件来破译它。

此外,您可能还想升级到较新的sshj版本,0.2.3是古老的。

相关内容

  • 没有找到相关文章

最新更新