ganymed-ssh2简介:
Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。可以利用它直接在Java程序中连接SSH服务器。Ganymed SSH-2支持SSH对话(远程命令执行和shell访问),本地和远程端口转发,本地数据流转发,X11转发和SCP。这些都没有依赖任何JCE provider,而且所有这些都包含加密的功能。
下载地址:
http://www.ganymed.ethz.ch/ssh2/
使用方法:
将 ganymed-ssh2-build210.jar 加入到项目的lib中
打印结果:
Here is some information about the remote host:
root pts/1 133.64.37.208 Sun May 3 13:16 - 13:19 (00:03)
wtmp begins Sun May 3 13:16:08 2009
ExitCode: 0
总结使用步骤:
1. 首先构造一个连接器,传入一个需要登陆的ip地址
Connection conn = new Connection(hostname);
2. 模拟登陆目的服务器 传入用户名和密码 ,
boolean isAuthenticated = conn.authenticateWithPassword(username, password);它会返回一个布尔值,true 代表成功登陆目的服务器,否则登陆失败
3. 打开一个session,有点象Hibernate的session ,执行你需要的linux 脚本命令 。
Session sess = conn.openSession();
sess.execCommand("last");
4. 接收目标服务器上的控制台返回结果,读取br中的内容
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
5.得到脚本运行成功与否的标志 :0-成功 非0-失败
System.out.println("ExitCode: " + sess.getExitStatus());
6.关闭session和connection
sess.close();
conn.close();
注意的地方:如果你需要执行多个linux控制台脚本,比如第一个脚本的返回结果是第二个脚本的入参,你必须打开多个Session,也就是多次调用
Session sess = conn.openSession();,使用完毕记得关闭就可以了
- package cn.com.xinli.ssh.test;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import ch.ethz.ssh2.Connection;
- import ch.ethz.ssh2.Session;
- import ch.ethz.ssh2.StreamGobbler;
- public class Basic
- {
- public static void main(String[] args)
- {
- String hostname = "172.100.1.64";
- String username = "******";
- String password = "******";
- try
- {
- /* Create a connection instance */
- Connection conn = new Connection(hostname);
- /* Now connect */
- conn.connect();
- /* 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.");
- /* Create a session */
- Session sess = conn.openSession();
- sess.execCommand("last");
- 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") */
- /**
- * 0 成功
- * 1 失败
- */
- 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);
- }
- }
- }
下面我们重点介绍一下ganymed-ssh2 的使用,非常简单: