您的位置:首页 > 其它

Ganymed SSH-2

2011-12-08 10:53 169 查看
 

Ganymed SSH-2 用标准java (tested on J2SE 1.4.2 and 5.0) 实现了SSH-2 protocol.

 

It allows one to connect to SSH servers from within Java programs. It supports SSH sessions (remote command execution and shell access), local and remote port forwarding, local stream forwarding, X11 forwarding, SCP and SFTP. There are no dependencies on any
JCE provider, as all crypto functionality is included.

 

Java代码 

Connection conn = new Connection(ServerHost);  

boolean isAuthenticated = conn.authenticateWithPassword(toServerUserName, toServerPassword); //支持密码链接和私钥链接(ssh建立无密码链接)  

  

Session sess = conn.openSession();  

sess.execCommand(command);  

  

sess.getStdout();//返回执行命令后信息  

sess.getStderr();//返回错误信息  

 

注意的地方:如果你需要执行多个 linux 控制台脚本,比如第一个脚本的返回结果是第二个脚本的入参,你必须打开多个 Session, 也就是多次调用

Session sess = conn.openSession(); , 使用完毕记得关闭就可以了

 

 

实现例子

 

利用Ganymed SSH-2模拟SSH操作

 
      今天在看SFTP资料时,无意中看到了Ganymed SSH-2,写了个简单demo,通过,感觉挺好用,特记录如之。
官方地址:http://www.cleondris.ch/opensource/ssh2/
简介:
 
Ganymed SSH-2 for Java is a library which implements the SSH-2 protocol in pure Java (tested on J2SE 1.4.2 and 5.0). It allows one to connect to SSH servers from within Java programs. It supports SSH sessions (remote command
execution and shell access), local and remote port forwarding, local stream forwarding, X11 forwarding, SCP and SFTP. There are no dependencies on any JCE provider, as all crypto functionality is included.
 
程序:view plaincopy to clipboardprint?

@Test  
public void testSsh() {  
        String hostname = "192.168.0.1";  
        String username = "root";  
        String password = "password";  
        try {  
                /* Create a connection instance */  
                Connection conn = new Connection(hostname);  
                /* Now connect */  
                conn.connect();  
                System.out.println("connect ok");  
                /* 
                 * Authenticate. If you get an IOException saying something like 
                 * "Authentication method password not supported by the server at this stage." 
                 * then please check the FAQ. 
                 */  
                boolean isAuthenticated = conn.authenticateWithPassword(username,password);  
                if (isAuthenticated == false)  
                        throw new IOException("Authentication failed.");  
                  
                System.out.println("Authentication ok");  
                /* Create a session */  
                Session sess = conn.openSession();  
                sess.execCommand("uname -a");  
                System.out.println("Here is some information about the remote host:");  
                /* 
                 * This basic example does not handle stderr, which is sometimes 
                 * dangerous (please read the FAQ). 
                 */  
                InputStream stdout = new StreamGobbler(sess.getStdout());  
                BufferedReader br = new BufferedReader(new InputStreamReader(stdout));  
                while (true) {  
                        String line = br.readLine();  
                        if (line == null)  
                                break;  
                        System.out.println(line);  
                }  
                /* Show exit status, if available (otherwise "null") */  
                System.out.println("ExitCode: " + sess.getExitStatus());  
                /* Close this session */  
                sess.close();  
                /* Close the connection */  
                conn.close();  
        } catch (IOException e) {  
                e.printStackTrace(System.err);  
                System.exit(2);  
        }  
}  

@Test
public void testSsh() {
String hostname = "192.168.0.1";
String username = "root";
String password = "password";
try {
/* Create a connection instance */
Connection conn = new Connection(hostname);
/* Now connect */
conn.connect();
System.out.println("connect ok");
/*
* Authenticate. If you get an IOException saying something like
* "Authentication method password not supported by the server at this stage."
* then please check the FAQ.
*/
boolean isAuthenticated = conn.authenticateWithPassword(username,password);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");

System.out.println("Authentication ok");
/* Create a session */
Session sess = conn.openSession();
sess.execCommand("uname -a");
System.out.println("Here is some information about the remote host:");
/*
* This basic example does not handle stderr, which is sometimes
* dangerous (please read the FAQ).
*/
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while (true) {
String line = br.readLine();
if (line == null)
break;
System.out.println(line);
}
/* Show exit status, if available (otherwise "null") */
System.out.println("ExitCode: " + sess.getExitStatus());
/* Close this session */
sess.close();
/* Close the connection */
conn.close();
} catch (IOException e) {
e.printStackTrace(System.err);
System.exit(2);
}

运行结果:
 
connect ok

Authentication ok

Here is some information about the remote host:

Linux localhost.localdomain 2.6.22 #1 SMP Wed Aug 13 11:24:59 CST 2008 i686 i686 i386 GNU/Linux

ExitCode: 0

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息