gpt4 book ai didi

java - connect() 上的 Android SSH 异常 - "KeyFactory ECDSA implementation not found"

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:50:16 25 4
gpt4 key购买 nike

我正在尝试从我的 Android 应用打开 SSH 客户端 session 。尝试连接到本地网络上的设备(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 - 它使用用户名和密码 auth 通过 SSH 连接到您的 RPi。这工作正常,所以它似乎不是网络问题。

最佳答案

Android 附带了 BouncyCaSTLe 的缩减版本,其中不包含 ECDSA 算法。因此,即使您在类路径中包含完整版本,Android 运行时版本也会被选取并使用。

你可能想看看http://rtyley.github.io/spongycastle/这是为了解决这个问题而创建的,它是 BouncycaSTLe 的重新打包版本,可以作为单独的 JCE 提供程序安装在 Android 中。在您尝试连接 SSHJ(未测试)之前,只需将其安装为默认的 JCE 提供程序。

Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);

关于java - connect() 上的 Android SSH 异常 - "KeyFactory ECDSA implementation not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26653399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com