2010-03-25 17 views
21

Sono nuovo in questo tipo di applicazione Java e cerco codice di esempio su come connettersi a un server remoto tramite SSH, eseguire comandi e ottenere l'output utilizzando Java come linguaggio di programmazione.Come si eseguono i comandi SSH sul sistema remoto utilizzando Java?

+0

ho inviato un codice che potrebbero aiuto a: http://stackoverflow.com/questions/2405885/any-good-jsch-example –

risposta

13

Dai un'occhiata alla 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

Funziona? Perché è stato dato un -1? – Zubair

+1

@Zubair - Il ragazzo che ha dato -1 non si è preoccupato di spiegare il suo punto di vista. Questa soluzione funziona perché è il più semplice possibile. Non è "puro java", però, questo è un inconveniente, ma se sei su Linux, non puoi renderlo più semplice senza usare librerie di terze parti. – bobah

+0

ok, grazie per la spiegazione – Zubair

11

JSch è un'implementazione Java puro di SSH2 che consente di eseguire comandi su macchine remote. Puoi trovarlo here, e ci sono alcuni esempi here.

È possibile utilizzare exec.java.

3

Si può dare un'occhiata a questo framework basato su Java per l'esecuzione di comandi remoti, incl. via SSH: https://github.com/jkovacic/remote-exec Si basa su due librerie SSH opensource, o JSch (per questa implementazione è supportata anche l'autenticazione ECDSA) o Ganymed (una di queste due librerie sarà sufficiente). A prima vista potrebbe sembrare un po 'complesso, dovrai preparare molte classi correlate a SSH (fornendo il server e i dettagli dell'utente, specificando i dettagli di crittografia, fornendo chiavi private compatibili con OpenSSH, ecc., Ma lo stesso SSH è piuttosto complesso pure). D'altra parte, il design modulare consente l'inclusione di più librerie SSH, un'implementazione semplice dell'elaborazione di output di altri comandi o anche classi interattive ecc.

2

Di seguito è riportato il modo più semplice per SSh in Java. Scaricare qualunque dei file nel link qui sotto e l'estratto, quindi aggiungere il file jar dal file estratto e aggiungere al vostro percorso di generazione del progetto http://www.ganymed.ethz.ch/ssh2/ e utilizzare il metodo seguito

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

     } 
    } 
Problemi correlati