0

I am trying to connect my localhost with classes which provided from sshj library,for educational purposes.So I wrote the code above but there is a problem at new SSHClient.authPublickey(String userName,KeyProvider... keys) method.I traced every line of my code not just my also traced sshj library too but I cannot find anything useful.I'm giving error codes , stack trace generated from my IDE(NetBeans 8.1) , my source code and the imported jars into my project below.

Jar files :(I can't share more than 2 links because of stackoverflow reputation constraining)

1 . sshj-0.2.3.jar

2 . slf4j-api-1.7.21.jar link = binary and source

3 . bcprov,bcpkix,bcpg,bcmail(jdk 1.5 - 1.8 version files) link = Signed Jar Section

Source Code :

    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

Error Code :

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)

SSHClient.java 1. branch

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

Stack Trace Line is authPublickey(username, Arrays.asList(keyProviders));

SSHClient.java 2. branch

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);

auth(username, am);

SSHClient.java 3. branch

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

I've generated my ssh public key with ssh-keygen without passphrase I also have passphrase protected pubkey too.If I try the same thing with it error stills the same. If any other things needed i'm ready to share just say it.

Huloo
  • 3
  • 4

1 Answers1

0

You're getting a ClassNotFoundError for org.bouncycastle.openssl.PEMReader. This means that the BouncyCastle libraries could not be found on the classpath.

It needs the PEMReader to read your public key file to decipher it.

Also you might want to upgrade to a newer sshj version, 0.2.3 is ancient.

Hiery Nomus
  • 17,429
  • 2
  • 41
  • 37