Tôi đang cố mở phiên ứng dụng SSH từ ứng dụng Android của mình. Đang cố gắng kết nối với một thiết bị trên mạng cục bộ (một Raspberry Pi). Tôi đang sử dụng thư viện SSHJ phiên bản 0.10.0. Nó không thành công trong cuộc gọi ssh.connect()
, với số TransportException
mà cuối cùng là do số NoSuchAlgorithmException
. Hãy tham khảo cây ngoại lệ bên dưới. câyNgoại lệ SSHJ của Android khi kết nối() - "Triển khai KeyFactory ECDSA không tìm thấy"
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) {
;
}
Ngoại lệ:
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
thông tin hệ thống khác:
SSHJ library : v0.10.0
Android device : Galaxy Note 3 running Android 4.4.2
tôi đã sử dụng sự hỗ trợ phụ thuộc maven trong Android Studio để mang lại JAR SSHJ và nó kéo theo sau ba thư viện ngoài jar SSH0 v0.10.0 ...
bouncy castle...
bcpkix-jdk15on-1.50.jar
bcprov-jdk15on-1.50.jar
logging....
slf4j-api-1.7.7.jar
Không có đầu mối bắt đầu từ ngoại lệ này ... bất kỳ đề xuất nào được đánh giá cao! Cảm ơn.
UPDATE: 31-Oct-2014
Theo đề nghị của LeeDavidPainter, tôi bao gồm JAR SpongyCastle 1.51.0 và thêm dòng này ở đầu trang:
Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
Tôi bây giờ nhận được một ngoại lệ khác trên cùng một dòng:
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
Cũng lưu ý rằng tôi cũng đã thử dòng sau, với kết quả tương tự:
Security.addProvider(new org.spongycastle.jce.provider.BouncyCastleProvider());
Tôi có một ứng dụng trên điện thoại của tôi mà về cơ bản làm chính xác những gì tôi muốn đạt được - nó được gọi là RaspberryPiController - nó kết nối với RPi của bạn thông qua SSH với tên truy cập và mật khẩu auth. Điều này làm việc tốt, vì vậy nó sẽ có vẻ không phải là một vấn đề mạng.
Cảm ơn bạn đã đề xuất - Tôi đã cho nó đi và bây giờ nhận được một ngoại lệ khác - java.security.spec.InvalidKeySpecException: thông số khóa không được nhận dạng. Nó xảy ra tại cùng một chỗ - trên ssh.connect() gọi. Tôi đã cập nhật câu hỏi ở trên với các chi tiết. –
Tôi có cùng một vấn đề và giới thiệu JCE mới này cho cùng một vấn đề như nhận xét ngay trên ... – gregoiregentil
Trên Android 4.4.4, tôi phải gọi 'Security.removeProvider ("BC") '** trước ** gọi 'Security.insertProviderAt (new BouncyCastleProvider(), Security.getProviders(). Length + 1)'. Nếu không, 'BouncyCastleProvider' chưa bao giờ được thêm vào danh sách các nhà cung cấp. – EricRobertBrewer