Tôi có một tệp pem trông giống như tệp trong thử nghiệm SSHJ (mặc dù tôi không thấy nó đang được tham chiếu): https://github.com/shikhar/sshj/blob/master/src/test/resources/hostkey.pem. Chỉ cần cố gắng xác thực thông qua tệp pem tới một cá thể EC2 (đọc dưới dạng chuỗi), nhưng gặp sự cố. Bất cứ ai làm điều này?SSHJ - Đăng nhập cặp khóa vào ví dụ EC2
SSHClient ssh = new SSHClient();
ssh.connect("ec2-XXXXXXX.compute-1.amazonaws.com");
ssh.authPublickey("ubuntu", getPemAsString("/Users/me/ec2.pem"));
final Session session = ssh.startSession();
session.exec("echo -e \"test\" >> /home/ubuntu/testfile");
Lỗi là dưới đây:
INFO [main] (TransportImpl.java:152) - Client identity string: SSH-2.0-SSHJ_0_8
INFO [main] (TransportImpl.java:161) - Server identity string: SSH-2.0-OpenSSH_5.8p1 Debian-7ubuntu1
INFO [main] (KeyExchanger.java:195) - Sending SSH_MSG_KEXINIT
INFO [reader] (KeyExchanger.java:357) - Received SSH_MSG_KEXINIT
INFO [reader] (AbstractDHG.java:110) - Sending SSH_MSG_KEXDH_INIT
INFO [reader] (KeyExchanger.java:370) - Received kex followup data
INFO [reader] (AbstractDHG.java:120) - Received SSH_MSG_KEXDH_REPLY
ERROR [reader] (TransportImpl.java:570) - Dying because - net.schmizz.sshj.transport.TransportException: [HOST_KEY_NOT_VERIFIABLE] Could not verify `ssh-rsa` host key with fingerprint `xx:0a:xx:b5:c2:fd:44:1d:e0:e4:fc:d8:5f:f8:dd:f6` for `ec2-XXXX.compute-1.amazonaws.com` on port 22
INFO [reader] (TransportImpl.java:302) - Setting active service to null-service
ERROR [main] (Promise.java:171) - <<kex done>> woke to: net.schmizz.sshj.transport.TransportException: [HOST_KEY_NOT_VERIFIABLE] Could not verify `ssh-rsa` host key with fingerprint `xx:0a:xx:b5:c2:fd:44:1d:e0:e4:fc:xx:5f:f8:dd:f6` for `ec2-XXXX.compute-1.amazonaws.com` on port 22
EDIT: Vẫn không có may mắn. Phải làm điều gì đó sai với khóa riêng AWS tạo ra để đăng nhập?
SSHClient ssh = new SSHClient();
ssh.connect("ec2-XXX.compute-1.amazonaws.com");
ssh.addHostKeyVerifier("dd:9c:XX:fa:6a:XX:32:6a:2b:c3:e7:bd:2b:15:26:5f:76:b6:c4:fe");
ssh.authPublickey("ubuntu", getRSAPrivateKeyAsString("mypem")); // Must be wrong?
final Session session = ssh.startSession();
session.exec("echo -e \"test\" >> /home/ubuntu/testfile");
bạn đang thêm người xác minh chính chủ sau khi gọi connect(), nó phải đi trước như việc xác minh sẽ xảy ra trong quá trình kết nối – shikhar
Cuối cùng Tôi thực sự thấy nó tốt hơn để sử dụng JSch. Dưới đây là ví dụ về cách sử dụng thư viện này: http://stackoverflow.com/questions/16626612/keypair-login-to-ec2-instance-with-jsch – Scott