2010-03-25 5 views
21

Soy nuevo en este tipo de aplicaciones Java y busco algún código de muestra sobre cómo conectarme a un servidor remoto utilizando SSH, ejecutar comandos y obtener una salida utilizando Java como lenguaje de programación.¿Cómo ejecuto los comandos SSH en el sistema remoto usando Java?

+0

he publicado un código que podría ayuda en: http://stackoverflow.com/questions/2405885/any-good-jsch-examples –

Respuesta

13

Tenga una mirada en 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(); 
+0

¿Funciona? ¿Por qué se le dio un -1? – Zubair

+1

@Zubair - El tipo que dio -1 no se ha molestado en explicar su punto de vista. Esta solución funciona porque es tan simple como solo es posible. No es "puro java", sin embargo, esto es un inconveniente, pero si estás en Linux, no puedes simplificarlo sin utilizar bibliotecas de terceros. – bobah

+0

bien, gracias por la explicación – Zubair

11

JSch es una implementación Java pura de SSH2 que le ayuda a ejecutar comandos en máquinas remotas. Puede encontrarlo here, y hay algunos ejemplos here.

Puede usar exec.java.

3

Puede echar un vistazo a este marco basado en Java para la ejecución remota de comandos, incl. a través de SSH: https://github.com/jkovacic/remote-exec Se basa en dos bibliotecas SSH de código abierto, ya sea JSch (para esta implementación incluso se admite una autenticación ECDSA) o Ganymed (una de estas dos bibliotecas será suficiente). A primera vista, puede parecer un poco complejo, tendrás que preparar muchas clases relacionadas con SSH (proporcionando detalles del servidor y del servidor, especificando detalles de encriptación, proporcionando claves privadas compatibles con OpenSSH, etc., pero el SSH en sí es bastante complejo) también). Por otro lado, el diseño modular permite la inclusión simple de más bibliotecas SSH, fácil implementación del procesamiento de salida de otros comandos o incluso clases interactivas, etc.

2

A continuación, se muestra la forma más sencilla de SSh en Java. Descargar cualquiera de los archivos en el siguiente enlace y extraer, a continuación, añadir el archivo jar desde el archivo extraído y añadir a su trayectoria de la estructura del proyecto http://www.ganymed.ethz.ch/ssh2/ y utilizar el siguiente método

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

     } 
    } 
Cuestiones relacionadas