【发布时间】:2014-12-26 12:25:43
【问题描述】:
我正在尝试从我的 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 之外,它还引入了以下三个库...
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,并使用用户名和密码进行身份验证。这工作正常,所以它似乎不是网络问题。
【问题讨论】:
标签: java android ssh raspberry-pi sshj