1

SSHJを使用してリモートサーバーでコマンドを実行し、次のように接続しています:

private static void connect() {
    try {
        client = new SSHClient();
        client.addHostKeyVerifier(new PromiscuousVerifier());
        client.connect(HOST);
        String path = System.getProperty("/**/user.home") + "/.ssh/id_rsa";
        client.authPublickey(USER, client.loadKeys(path));
    } catch (IOException e) {
        logErrorAndRethrowException("Error connecting to server via SSH", e);
    }
}

これを IDE で実行すると、問題なく実行されます。しかし、Gradle を使用して Jenkins 環境で実行しようとすると、次のスタック トレースが表示されます。

Exception in thread "reader" java.lang.NoClassDefFoundError: org/bouncycastle/openssl/PEMParser
    at net.schmizz.sshj.userauth.keyprovider.PKCS8KeyFile.readKeyPair(PKCS8KeyFile.java:131)
    at net.schmizz.sshj.userauth.keyprovider.PKCS8KeyFile.getPrivate(PKCS8KeyFile.java:72)
    at net.schmizz.sshj.userauth.method.KeyedAuthMethod.putSig(KeyedAuthMethod.java:59)
    at net.schmizz.sshj.userauth.method.AuthPublickey.sendSignedReq(AuthPublickey.java:74)
    at net.schmizz.sshj.userauth.method.AuthPublickey.handle(AuthPublickey.java:45)
    at net.schmizz.sshj.userauth.UserAuthImpl.handle(UserAuthImpl.java:143)
    at net.schmizz.sshj.transport.TransportImpl.handle(TransportImpl.java:511)
    at net.schmizz.sshj.transport.Decoder.decode(Decoder.java:107)
    at net.schmizz.sshj.transport.Decoder.received(Decoder.java:175)
    at net.schmizz.sshj.transport.Reader.run(Reader.java:60)
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.openssl.PEMParser
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 10 more

私は bouncycastle を別の依存関係 (bcprov と bcpkix パッケージの両方) として追加しようとしましたが、SSHJ がそれを持ち込んだとしても、バージョンをいじくり回し、Jenkins bouncycastle プラグインを有効と無効の両方で試しました。Hierynomus の代わりに schmizz SSHJ も試しました。

Java 8、Gradle 3.2.1 (原因の理由)、Jenkins 2.190.3、および Hierynomus SSHJ 0.27 を使用しています。

4

1 に答える 1

1

問題が見つかりました。私がインポートしていたもう 1 つの依存関係は、古いバージョンの bouncycastle をひそかに持ち込んでいました。これは、SSHJ が持ち込んだものを上書きしていました。私はその依存関係を除外し、問題を解決しました。

于 2019-12-06T20:25:52.810 に答える