2010-03-25 58 views
21

我是新来的这种Java应用程序,并寻找关于如何使用SSH连接到远程服务器,执行命令以及使用Java作为编程语言返回输出的示例代码。如何在使用Java的远程系统上运行SSH命令?

+0

我张贴一些代码,可能帮助:http://stackoverflow.com/questions/2405885/any-good-jsch-examples – 2013-10-26 21:11:57

回答

13

看一看的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

这是否工作?为什么给它一个-1? – Zubair 2011-01-06 09:47:02

+1

@Zubair - 给-1的家伙并没有打算解释他的观点。这个解决方案的确行得通,因为它只有尽可能简单。虽然这不是“纯Java”,但这是一个缺点,但如果你使用的是Linux,那么不使用第三方库就可以简化它。 – bobah 2011-01-06 16:28:41

+0

好的,谢谢你的解释 – Zubair 2011-01-06 17:51:15

11

JSch是一个纯Java实现SSH2的,可以帮助你运行远程机器上的命令。 你可以找到它here,并且有一些例子here。您可以使用exec.java

3

你可以看看这个基于Java的框架来执行远程命令,包括:通过SSH:https://github.com/jkovacic/remote-exec 它依赖于两个开源的SSH库,无论是JSch(即使支持ECDSA身份验证的实现)或Ganymed(这两个库中的一个都足够了)。乍一看,它可能看起来有点复杂,你必须准备大量的SSH相关类(提供服务器和用户详细信息,指定加密细节,提供OpenSSH兼容私钥等,但SSH本身非常复杂太)。另一方面,模块化设计允许简单包含更多的SSH库,轻松实现其他命令的输出处理甚至交互式类等。

2

下面是在java中SSh最简单的方法。下载任何在下面的链接,并提取该文件,然后从提取的文件添加jar文件,并添加到项目 http://www.ganymed.ethz.ch/ssh2/ 的构建路径,并使用下面的方法

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

     } 
    } 
相关问题