2010-03-25 6 views
21

Je suis nouveau dans ce genre d'application Java et je cherche un exemple de code sur la connexion à un serveur distant en utilisant SSH, j'exécute des commandes et je récupère la sortie en utilisant Java comme langage de programmation.Comment exécuter des commandes SSH sur un système distant utilisant Java?

+0

Je posté un code qui pourrait aider à: http://stackoverflow.com/questions/2405885/any-good-jsch-examples –

Répondre

13

Jetez un 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(); 
+0

Est-ce que cela fonctionne? Pourquoi a-t-il donné un -1? – Zubair

+1

@Zubair - Le gars qui a donné -1 n'a pas pris la peine d'expliquer son point de vue. Cette solution fonctionne parce qu'elle est aussi simple que possible. Ce n'est pas un "Java pur", mais c'est un inconvénient, mais si vous êtes sur Linux, vous ne pouvez pas le simplifier sans utiliser de bibliothèques tierces. – bobah

+0

ok, merci pour l'explication – Zubair

11

JSch est un pur Java mise en œuvre de SSH2 qui vous aide à exécuter commandes sur des machines distantes. Vous pouvez le trouver here, et il y a quelques exemples here. Vous pouvez utiliser exec.java.

3

Vous pouvez jeter un oeil à ce cadre basé sur Java pour l'exécution de commande à distance, incl. via SSH: https://github.com/jkovacic/remote-exec Il repose sur deux bibliothèques SSH opensource, soit JSch (pour cette implémentation même une authentification ECDSA est supportée), soit Ganymed (l'une de ces deux bibliothèques sera suffisante). Au premier abord, cela peut sembler un peu complexe, vous devrez préparer beaucoup de classes liées à SSH (fournir le serveur et vos détails utilisateur, spécifier les détails de chiffrement, fournir des clés privées compatibles OpenSSH, etc., mais le SSH lui-même est assez complexe aussi). D'autre part, la conception modulaire permet une inclusion simple de plusieurs bibliothèques SSH, une implémentation facile du traitement des sorties d'autres commandes ou même des classes interactives, etc.

2

Voici la manière la plus simple de SSh en java. Téléchargez l'un des fichiers dans le lien ci-dessous et l'extrait, puis ajouter le fichier jar à partir du fichier extrait et ajouter à votre chemin de construction du projet http://www.ganymed.ethz.ch/ssh2/ et 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); 

     } 
    } 
Questions connexes