publickey por permission instancia ec2 descargar conectarse conectar change aws acceso java ssh amazon-ec2 sshj

java - por - download key pair amazon ec2



SSHJ-Inicio de sesión de Keypair a instancia de EC2 (3)

Tengo un archivo de pem que se parece al de las pruebas SSHJ (aunque no veo que se haga referencia a él): https://github.com/shikhar/sshj/blob/master/src/test/resources/hostkey.pem . Simplemente tratando de autenticar a través del archivo pem a una instancia EC2 (leer como cadena), pero teniendo problemas. ¿Alguien hizo esto?

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

El error está abajo:

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: Todavía sin suerte. ¿Debe estar haciendo algo mal con la clave privada que AWS genera para iniciar sesión?

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


No es la autenticación del usuario la que lo está desviando, es la verificación de la clave del host :)

Algo así como client.addHostKeyVerifier ("xx: 0a: xx: b5: c2: fd: 44: 1d: e0: e4: fc: xx: 5f: f8: dd: f6") antes de conectarse.


Me he conectado exitosamente a una instancia de Amazon EC2 usando lo siguiente:

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(); }


El ejemplo dado para conectarse a EC2 no me funcionó inicialmente hasta que agregué BouncyCastleProvider a la clase java.security.Security. El ejemplo simple que funcionó para mí (escrito en Groovy por simplicidad) es:

@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()