6
votes

SSHJ - Connexion KeyPair à l'instance EC2

J'ai un fichier PEM qui ressemble à celui des tests SSHJ (même si je ne le vois pas être référencé): https://github.com/shikhar/sshj/blob/master/src/test/resources/hostkey.pem . Essayez simplement d'authentifier via le fichier PEM à une instance EC2 (lecture en chaîne), mais avoir des problèmes. Toute personne a fait cela?

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


2 commentaires

Vous ajoutez le vérificateur de clé d'hôte après avoir appelé Connect (), il doit aller auparavant car la vérification se produit pendant la connexion


En fin de compte, je l'ai effectivement trouvé mieux d'utiliser JSCH. Voici un exemple d'utilisation de cette bibliothèque: Stackoverflow.com/Questtions/166626612/...


3 Réponses :


2
votes

Ce n'est pas l'authentification de l'utilisateur qui vous trébuche, c'est la vérification de la clé hôte :)

quelque chose comme Client.addhostKeyCeyverifier ("XX: 0A: XX: B5: C2: FD: 44: 1D: E4: FC: XX: 5F: F8: DD: F6") Avant de vous connecter.


2 commentaires

Je vois :) Génial, je vais essayer et je reviens vers vous!


Je suis en train de passer un diable de temps avec cela. Ajout de cette ligne ne m'aide pas. Je dois faire quelque chose de mal avec la clé privée RSA EC2 génère des groupes de sécurité? `` `Sshclient ssh = nouveau sshclient (); ssh.connect ("EC2-XXX.COMPUTE-1.AMAZONAWS.com"); ssh.addhostkeyverifier ("DD: 9C: XX: FA: 6A: XX: 32: 6A: 2B: C3: E7: B D: 2B: 15: 26: 5F: 76: B6: C4: Fe") ; ssh.authPublickey ("Ubuntu", getrsaprivateKeySring ("MyPem")); Session de session finale = ssh.startsession (); session.exec ("Echo -e \" test \ ">> / home / ubuntu / testfile"); `` `



3
votes

J'ai connecté avec succès à une instance Amazon EC2 en utilisant les éléments suivants:

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


0 commentaires

4
votes

L'exemple donné pour la connexion à EC2 n'a pas initialement travaillé pour moi avant d'ajouter le BouncycastleProvider à la classe Java.Security.Security. L'exemple simple qui a fonctionné pour moi (écrit à Groovy pour la simplicité) est le suivant:

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


1 commentaires

Tout comme une note pour moi, j'ai utilisé ce même format pour une instance de linux interne, je me connectait. L'ajout clé dont j'avais besoin était le Security.addProvider (nouveau org.bouncycastle.jce.provider.bouncycastleProvider ()); ligne.