2016-07-10 9 views
0

교육용으로 sshj 라이브러리에서 제공된 클래스와 localhost를 연결하려고합니다. 위 코드를 작성했지만 new SSHClient.authPublickey(String userName,KeyProvider... keys) 메서드에 문제가 있습니다. . 내 코드의 모든 줄을 추적 내뿐만 아니라 sshj 라이브러리도 추적하지만 유용한 코드를 제공하지 않습니다. 내 IDE (NetBeans 8.1)에서 생성 된 스택 추적, 내 소스 코드 및 가져온 jars를 프로젝트에 제공합니다. 이하.NoClassDefFoundError '새 SSHClient.authPublickey (String, KeyProvider)'메서드

Jar 파일 : 은 (I 때문에 유래 평판, 구속의 2 개 이상의 링크를 공유 할 수 없습니다)

1. sshj-0.2.3.jar

2. slf4j-api-1.7.21.jar 링크 = binary and source

3. bcprov, bcpkix, bcpg, bcmail (JDK 1.5-1.8 버전 파일) 링크 = Signed Jar Section

소스 코드 :

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) 

스택 추적 선 sshClient입니다. authPublickey (uName, pubkey)

SSHClient.java 1. 지점

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

스택 추적 선 authPublickey (사용자 이름, Arrays.asList (keyProviders는))이다; SSHClient.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 가지

나는 또한 내가 그 오류와 함께 같은 일을 시도 저두 암호 보호 pubkey가 암호없이 SSH-Keygen은 내 SSH 공개 키를 생성 한
public void auth(String username, Iterable<AuthMethod> methods) 
      throws UserAuthException, TransportException { 
     assert isConnected(); 
     auth.authenticate(username, (Service) conn, methods);//exception thrown at this line 

여전히 동일합니다. 다른 것들이 필요한 경우 공유 할 준비가되었습니다.

답변

0

org.bouncycastle.openssl.PEMReader에 대해 ClassNotFoundError이 표시됩니다. 이것은 클래스 경로에서 BouncyCastle 라이브러리를 찾을 수 없음을 의미합니다.

해독을 위해 공개 키 파일을 읽으려면 PEMReader가 필요합니다.

또한 최신 sshj 버전으로 업그레이드해야 할 수도 있습니다. 0.2.3은 고대입니다.