2013-11-06 3 views
1

Тестирование SSHJ в Eclipse и все выглядит хорошо. Но когда я использую тени плагин Maven для упаковки SSHJ я получаю следующее сообщение об ошибке:SSHJ и плагин Maven shade

Exception in thread "main" net.schmizz.sshj.userauth.UserAuthException: Exhausted available authentication methods 
at net.schmizz.sshj.SSHClient.auth(SSHClient.java:217) 
at net.schmizz.sshj.SSHClient.authPublickey(SSHClient.java:316) 
at net.schmizz.sshj.SSHClient.authPublickey(SSHClient.java:365) 
at net.schmizz.sshj.SSHClient.authPublickey(SSHClient.java:295) 
at no.f12.SshRepository.executeTaskOnHost(SshRepository.java:23) 
at no.f12.SshService.serviceCommand(SshService.java:22) 
at no.f12.App.main(App.java:29) 

Добавление

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

изменения сообщения об ошибке на:

Exception in thread "main" net.schmizz.sshj.transport.TransportException: Unable to reach a settlement: [] and [aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, [email protected], [email protected], aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, aes192-cbc, aes256-cbc, arcfour, [email protected]] 
at net.schmizz.sshj.transport.Proposal.firstMatch(Proposal.java:165) 
at net.schmizz.sshj.transport.Proposal.negotiate(Proposal.java:147) 
at net.schmizz.sshj.transport.KeyExchanger.gotKexInit(KeyExchanger.java:239) 
at net.schmizz.sshj.transport.KeyExchanger.handle(KeyExchanger.java:364) 
at net.schmizz.sshj.transport.TransportImpl.handle(TransportImpl.java:478) 
at net.schmizz.sshj.transport.Decoder.decode(Decoder.java:127) 
at net.schmizz.sshj.transport.Decoder.received(Decoder.java:195) 
at net.schmizz.sshj.transport.Reader.run(Reader.java:72) 

Любая идея, как получить вокруг этого?

Немного фона, почему я хочу использовать тень ... Я пытаюсь добраться до точки, где использование Java и распространение небольших utils мертво просто. Поэтому я создаю действительно исполняемую банку, используя это: https://github.com/brianm/really-executable-jars-maven-plugin. Это позволяет мне создать один исполняемый файл для распространения и добавления к пути пользователя. Похоже, что Go имеет один двоичный файл со всеми зависимостями.

+0

Код, который я использую, доступен здесь BTW: https://github.com/anderssv/executable-ssh-util –

+0

Чтобы проверить работу: 'mvn -Passembly clean install && cd target &&/bin/bash bin/app services stop' –

+0

Чтобы проверить отсутствие: 'mvn clean install && cd target && ./executable-ssh-util-1.0-SNAPSHOT.jar services stop' –

ответ

0

Вы должны подписать банку, это требуется Javax.security. У меня возникла аналогичная проблема, и из моего теста есть стек:

Cannot init Cipher factory: blowfish-cbc 
java.lang.SecurityException: JCE cannot authenticate the provider BC 
    at javax.crypto.Cipher.getInstance(Cipher.java:642) 
    at javax.crypto.Cipher.getInstance(Cipher.java:580) 
    at net.schmizz.sshj.common.SecurityUtils.getCipher(SecurityUtils.java:96) 
    at net.schmizz.sshj.transport.cipher.BaseCipher.init(BaseCipher.java:88) 
    .... 
Caused by: java.util.jar.JarException: file:/test-jar-with-dependencies.jar has unsigned entries - library.properties 
    at javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:462) 
    at javax.crypto.JarVerifier.verifyJars(JarVerifier.java:322) 
    at javax.crypto.JarVerifier.verify(JarVerifier.java:250) 
    at javax.crypto.JceSecurity.verifyProviderJar(JceSecurity.java:161) 
    at javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:187) 
    at javax.crypto.Cipher.getInstance(Cipher.java:638) 
    at javax.crypto.Cipher.getInstance(Cipher.java:580) 
    at net.schmizz.sshj.common.SecurityUtils.getCipher(SecurityUtils.java:96) 
    at net.schmizz.sshj.transport.cipher.BaseCipher.init(BaseCipher.java:88) 
    at net.schmizz.sshj.DefaultConfig.initCipherFactories(DefaultConfig.java:152) 
    at net.schmizz.sshj.DefaultConfig.<init>(DefaultConfig.java:107) 
1

У меня была эта точная проблема. Я, наконец, сдался, пытаясь положить все в большой «убержар».

Вместо этого я собрал все банки, используя maven-assembly-plugin, а затем извлеките и добавьте их в путь к классам, чтобы выполнить, например. 'java -cp all-needed-libs/* com.company.MainClass'.

1

Другим подходом, который может работать, является добавление bouncycastle в библиотеку расширения JRE.

E.g put 'bcprov-jdk15on-1.49.jar' в папке '$ JAVA_HOME/jre/lib/ext /' на хосте.

Смежные вопросы