Sto provando ad aprire una sessione client SSH dalla mia app Android. Cercando di connettersi a un dispositivo sulla rete locale (un Raspberry Pi). Sto usando la versione di libreria SSHJ 0.10.0. Non riesce sulla chiamata ssh.connect()
, con un TransportException
che è in definitiva causato da un NoSuchAlgorithmException
. Fare riferimento a albero delle eccezioni di seguito. alberoEccezione SSHJ Android su connect() - "Impossibile trovare l'implementazione ECDSA KeyFactory"
SSHClient ssh = new SSHClient(new AndroidConfig());
Session session = null;
try {
//ssh.loadKnownHosts();
// Exception thrown on this line
ssh.connect("192.168.1.109", 22);
// Doesn't reach below
ssh.authPassword("user", "password");
session = ssh.startSession();
}
catch (net.schmizz.sshj.transport.TransportException ex) {
;
}
Eccezione:
net.schmizz.sshj.transport.TransportException
net.schmizz.sshj.common.SSHException
net.schmizz.sshj.common.SSHRuntimeException
java.security.GeneralSecurityException: java.security.NoSuchAlgorithmException: KeyFactory ECDSA implementation not found
java.security.NoSuchAlgorithmException: KeyFactory ECDSA implementation not found
Altre informazioni sistema:
SSHJ library : v0.10.0
Android device : Galaxy Note 3 running Android 4.4.2
ho usato il supporto Maven dipendenza nel Android Studio per portare nel vaso SSHJ e tirato nei seguenti tre librerie in aggiunta al vaso SSHJ v0.10.0 ...
bouncy castle...
bcpkix-jdk15on-1.50.jar
bcprov-jdk15on-1.50.jar
logging....
slf4j-api-1.7.7.jar
Non ho idea di dove iniziare con questa eccezione ... qualsiasi suggerimento apprezzato! Grazie.
UPDATE: 31-ott-2014
Come suggerito da LeeDavidPainter, ho incluso il JAR SpongyCastle 1.51.0 e ha aggiunto questa riga in alto:
Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
Ora sto ricevendo un'eccezione diversa sulla stessa linea:
net.schmizz.sshj.transport.TransportException
net.schmizz.sshj.common.SSHException
net.schmizz.sshj.common.SSHRuntimeException
java.security.GeneralSecurityException: java.security.spec.InvalidKeySpecException: key spec not recognised
java.security.spec.InvalidKeySpecException: key spec not recognised
Nota anche ho provato la seguente riga, con lo stesso risultato:
Security.addProvider(new org.spongycastle.jce.provider.BouncyCastleProvider());
ho un'altra app sul mio cellulare che è fondamentalmente facendo esattamente quello che voglio ottenere - la sua chiamata RaspberryPiController - si collega al vostro RPI su SSH con nome utente e password di autenticazione. Funziona bene, quindi sembra che non sia un problema di rete.
Grazie per il suggerimento - ho dato un tentativo e ora sto ottenendo un'eccezione diversa - java.security.spec.InvalidKeySpecException: specifica chiave non riconosciuta. Succede nello stesso punto - sulla chiamata ssh.connect(). Ho aggiornato la domanda sopra con i dettagli. –
Ho lo stesso problema e l'introduzione di questo nuovo JCE dà lo stesso problema del commento appena sopra ... – gregoiregentil
Su Android 4.4.4, ho dovuto chiamare 'Security.removeProvider (" BC ")' ** prima ** chiamata 'Security.insertProviderAt (new BouncyCastleProvider(), Security.getProviders(). Length + 1)'. In caso contrario, il 'BouncyCastleProvider' non è mai stato aggiunto all'elenco dei provider. – EricRobertBrewer