教育目的で、ローカルホストを sshj ライブラリから提供されるクラスに接続しようとしています。上記のコードを書きましたが、メソッドに問題があります。コードのすべての行をトレースしただけでなく、ライブラリnew SSHClient.authPublickey(String userName,KeyProvider... keys)
もトレースしましたが、できませんsshj
エラー コード、IDE() から生成されたスタック トレースNetBeans 8.1
、ソース コード、およびインポートされた jar ファイルを以下のプロジェクトに提供しています。
Jar ファイル : (stackoverflow の評判の制約により、2 つ以上のリンクを共有することはできません)
1. sshj-0.2.3.jar
2. slf4j-api-1.7.21.jar リンク =バイナリとソース
3. bcprov、bcpkix、bcpg、bcmail(jdk 1.5 - 1.8 バージョン ファイル) リンク =署名付き Jar セクション
ソースコード :
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(username, 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. ブランチ
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 公開鍵を生成しましたが、パスフレーズで保護された pubkey も持っています。同じことを試してもエラーは同じです。他に必要なものがあれば、共有する準備ができています。