Android アプリから SSH クライアント セッションを開こうとしています。ローカル ネットワーク上のデバイス (Raspberry Pi) に接続しようとしています。SSHJライブラリ バージョン 0.10.0を使用しています。ssh.connect()
呼び出しに失敗し、TransportException
最終的には が原因NoSuchAlgorithmException
です。以下の例外ツリーを参照してください。
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) {
;
}
例外ツリー:
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
その他のシステム情報:
SSHJ library : v0.10.0
Android device : Galaxy Note 3 running Android 4.4.2
Android Studio の maven 依存関係サポートを使用して SSHJ JAR を取り込み、SSHJ v0.10.0 jar に加えて次の 3 つのライブラリを取り込みました...
bouncy castle...
bcpkix-jdk15on-1.50.jar
bcprov-jdk15on-1.50.jar
logging....
slf4j-api-1.7.7.jar
この例外をどこから始めればよいかわかりません...どんな提案でも大歓迎です! ありがとう。
更新: 2014 年 10 月 31 日
LeeDavidPainterの提案に従って、SpongyCastle 1.51.0 JAR をインクルードし、上部に次の行を追加しました。
Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
同じ行で別の例外が発生しています。
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
また、同じ結果で次の行も試したことに注意してください。
Security.addProvider(new org.spongycastle.jce.provider.BouncyCastleProvider());
私の携帯電話には、基本的に私が達成したいことを正確に実行する別のアプリがあります-RaspberryPiControllerと呼ばれます-ユーザー名とパスワード認証を使用してSSH経由でRPiに接続します。これは正常に機能するため、ネットワークの問題ではないようです。