2012-02-14 16 views
6

मेरे पास एक पेम फ़ाइल है जो एसएसएचजे परीक्षणों में से एक की तरह दिखती है (हालांकि मुझे इसे संदर्भित नहीं किया जाता है): https://github.com/shikhar/sshj/blob/master/src/test/resources/hostkey.pem। बस एक ईसी 2 उदाहरण (स्ट्रिंग के रूप में पढ़ें) में पेम फ़ाइल के माध्यम से लिखने की कोशिश कर रहा है, लेकिन परेशानी है। किसी ने यह किया?एसएसएचजे - ईसी 2 इंस्टेंस में कीपैयर लॉगिन

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"); 

त्रुटि के नीचे है:

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 

संपादित करें: अभी भी कोई भाग्य। निजी कुंजी एडब्ल्यूएस लॉगिन के लिए उत्पन्न कुछ गलत होना चाहिए?

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"); 
+0

आप कनेक्ट(), यह के रूप में सत्यापन – shikhar

+0

जोड़ने अंत में के दौरान पहले ही पूरी हो जाना पड़ता है बुला के बाद होस्ट कुंजी सत्यापनकर्ता जोड़ रहे हैं मुझे वास्तव में जेएसएच का उपयोग करना बेहतर लगता है। यहां इस लाइब्रेरी का उपयोग करने का एक उदाहरण दिया गया है: http://stackoverflow.com/questions/16626612/keypair-login-to-ec2-instance-with-jsch – Scott

उत्तर

2

यह उपयोगकर्ता प्रमाणीकरण है कि आप ट्रिपिंग है नहीं है, यह होस्ट कुंजी सत्यापन :) है

client.addHostKeyVerifier ("xx तरह: 0A: xx: B5: C2: fd: 44: 1 दिन: e0: e4: fc: xx: 5f: f8: dd: f6 ") कनेक्ट करने से पहले।

+0

मुझे लगता है :) बढ़िया, मैं इसे आज़माउंगा और वापस आऊंगा आप! –

+0

मैं वास्तव में इसके साथ एक समय का एक बिल्ली है। उस रेखा को जोड़ने से मेरी मदद नहीं होती है। सुरक्षा समूहों के लिए आरएसए निजी कुंजी ईसी 2 उत्पन्न करने के साथ मुझे कुछ गलत करना होगा? '' \t एसएसएच क्लाइंट एसएसएच = नया एसएसएच क्लाइंट(); \t \t ssh.connect ("ec2-XXX.compute-1.amazonaws.com"); \t \t ssh.addHostKeyVerifier ("dd: 9c: XX: पिता: 6a: XX: 32: 6a: 2 बी: सी 3: E7: BD: 2 बी: 15: 26: 5F: 76: B6: C4: फ़े"); \t \t ssh.authPublickey ("उबंटू", getRSAPrivateKeyAsString ("mypem")); \t \t अंतिम सत्र सत्र = ssh.start सत्र(); \t \t session.exec ("echo -e \" test \ ">>/home/ubuntu/testfile"); '' –

2

मैं सफलतापूर्वक उपयोग कर एक अमेज़न EC2 उदाहरण से कनेक्ट किया है निम्नलिखित:

final SSHClient ssh = new SSHClient(); 
ssh.addHostKeyVerifier("XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX"); 

ssh.connect("host"); 

PKCS8KeyFile keyFile = new PKCS8KeyFile(); 
keyFile.init(new File("server_pem.pem")); 
ssh.auth("ec2-user", new AuthPublickey(keyFile)); 

try { 
    final Session session = ssh.startSession(); 
    try { 
     final Command command = session.exec("whoami"); 
     String response = IOUtils.readFully(command.getInputStream()).toString(); 
     command.join(10, TimeUnit.SECONDS); 
     return response; 
    } finally { 
     session.close(); 
    } 
} finally { 
    ssh.disconnect(); 
} 
3

उदाहरण EC2 से कनेक्ट कर रहा शुरू में मेरे लिए काम नहीं किया जब तक मैं java.security.Security वर्ग के लिए BouncyCastleProvider जोड़ा के लिए दिया । सरल उदाहरण है कि मुझे (सादगी के लिए ग्रूवी में लिखा) के लिए काम किया है:

@Grab(group='net.schmizz', module='sshj', version='0.8.1') 
@Grab(group='org.bouncycastle', module='bcprov-jdk16', version='1.46') 

import net.schmizz.sshj.* 
import net.schmizz.sshj.userauth.keyprovider.* 
import net.schmizz.sshj.common.* 
import net.schmizz.sshj.transport.verification.PromiscuousVerifier 
import net.schmizz.sshj.connection.channel.direct.Session 
import net.schmizz.sshj.connection.channel.direct.Session.Command 

import java.security.* 
import java.util.concurrent.TimeUnit 

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

client = new SSHClient() 
client.addHostKeyVerifier(new PromiscuousVerifier()) 
client.connect("ec2-XXX-XXX-XXX-XXX.compute-1.amazonaws.com") 

PKCS8KeyFile keyFile = new PKCS8KeyFile() 
keyFile.init(new File("/dev/ec2/key/mykey.pem")) 
client.authPublickey("ubuntu",keyFile) 

final Session session = client.startSession() 
final Command cmd = session.exec("whoami") 
String response = IOUtils.readFully(cmd.getInputStream()).toString() 
cmd.join(10, TimeUnit.SECONDS) 

println response //ubuntu 

session.close() 
client.disconnect() 
+0

बस मेरे लिए एक नोट के रूप में मैंने एक आंतरिक लिनक्स उदाहरण के लिए इसी प्रारूप का उपयोग किया जो मैं कनेक्ट कर रहा था। मुझे आवश्यक मुख्य जोड़ सुरक्षा था। एडप्रोवाइडर (नया org.bouncycastle.jce.provider.BouncyCastleProvider()); लाइन। –

संबंधित मुद्दे