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

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

24
demandé sur M. A. Kishawy 2010-03-25 12:51:29

5 réponses

jetez un coup d'oeil à 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();
13
répondu bobah 2014-12-17 21:22:37

JSch est une implémentation Java pure 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.

11
répondu mehdi ali soltani 2015-01-12 07:11:02

ci-dessous est la façon la plus facile de SSh en java. Téléchargez le fichier dans le lien ci-dessous et extrayez, puis ajoutez le fichier jar à partir du fichier extrait et ajoutez à votre chemin de construction du projet http://www.ganymed.ethz.ch/ssh2/ et d'utiliser 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);

        }
    }
4
répondu Pavan Kumar 2016-06-18 13:19:27

vous pouvez jeter un oeil à ce cadre basé sur Java pour l'exécution de commandes à distance, incl. via SSH: https://github.com/jkovacic/remote-exec Il s'appuie sur deux bibliothèques SSH opensource, soit JSch (pour cette implémentation, même une authentification ECDSA est prise en charge) ou Ganymed (une de ces deux bibliothèques sera suffisante). Au premier coup d'œil, cela peut sembler un peu complexe, vous aurez à préparer beaucoup de classes liées à SSH (fournir le serveur et vos détails d'utilisateur, détails de cryptage, fournir des clés privées compatibles OpenSSH, etc. mais le SSH lui-même est assez complexe aussi). D'un autre côté, la conception modulaire permet l'inclusion simple d'un plus grand nombre de bibliothèques SSH, la mise en œuvre facile du traitement de sortie d'autres commandes ou même des classes Interactives, etc.

3
répondu neyc 2012-05-21 20:21:53
http://www.cleondris.ch/opensource/ssh2/

1
répondu KarlP 2010-03-25 11:30:51