web-dev-qa-db-fra.com

Comment exécuter des commandes SSH sur un système distant en utilisant Java?

Je suis nouveau dans ce type d'application Java et je cherche un exemple de code sur la façon de se connecter à un serveur distant en utilisant SSH, d'exécuter des commandes et de récupérer la sortie en utilisant Java comme langage de programmation.

27
sweety

Jetez un œil à Runtime.exec () Javadoc

Process p = Runtime.getRuntime().exec("ssh myhost");
PrintStream out = new PrintStream(p.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));

out.println("ls -l /home/me");
while (in.ready()) {
  String s = in.readLine();
  System.out.println(s);
}
out.println("exit");

p.waitFor();
16
bobah

JSch est une pure Java implémentation de SSH2 qui vous aide à exécuter des commandes sur des machines distantes. Vous pouvez le trouver ici , et il y a quelques exemples ici .

Vous pouvez utiliser exec.Java.

12
mehdi ali soltani

Vous trouverez ci-dessous le moyen le plus simple d'accéder à SSh en Java. Téléchargez l'un des fichiers dans le lien ci-dessous et extrayez, puis ajoutez le fichier jar à partir du fichier extrait et ajoutez-le à votre chemin de génération du projet http://www.ganymed.ethz.ch/ssh2/ = et utilisez la méthode ci-dessous

public void SSHClient(String serverIp,String command, String usernameString,String password) throws IOException{
        System.out.println("inside the ssh function");
        try
        {
            Connection conn = new Connection(serverIp);
            conn.connect();
            boolean isAuthenticated = conn.authenticateWithPassword(usernameString, password);
            if (isAuthenticated == false)
                throw new IOException("Authentication failed.");        
            ch.ethz.ssh2.Session sess = conn.openSession();
            sess.execCommand(command);  
            InputStream stdout = new StreamGobbler(sess.getStdout());
            BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
            System.out.println("the output of the command is");
            while (true)
            {
                String line = br.readLine();
                if (line == null)
                    break;
                System.out.println(line);
            }
            System.out.println("ExitCode: " + sess.getExitStatus());
            sess.close();
            conn.close();
        }
        catch (IOException e)
        {
            e.printStackTrace(System.err);

        }
    }
5
Pavan Kumar

Vous pouvez jeter un œil à ce Java pour l'exécution de commandes à distance, y compris via SSH: https://github.com/jkovacic/remote-exec It s'appuie sur deux bibliothèques SSH open source, soit JSch (pour cette implémentation, même une authentification ECDSA est prise en charge) ou Ganymed (une de ces deux bibliothèques suffira). À première vue, cela peut sembler un peu complexe, vous devrez de nombreuses classes liées à SSH (fournissant le serveur et vos informations utilisateur, spécifiant les détails de chiffrement, fournissant des clés privées compatibles OpenSSH, etc., mais le SSH lui-même est également assez complexe). D'autre part, la conception modulaire permet une inclusion simple de plus Bibliothèques SSH, implémentation facile du traitement de sortie d'autres commandes ou même des classes interactives, etc.

3
neyc

J'ai utilisé du ganymède pour cela il y a quelques années ... http://www.cleondris.ch/opensource/ssh2/

1
KarlP