利用Ganymed SSH-2模拟SSH操作
来源:互联网 发布:咨询师网络继续教育 编辑:程序博客网 时间:2024/05/17 05:17
官方地址:http://www.cleondris.ch/opensource/ssh2/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.junit.Test;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class TestSSH{
@Test
public void testSsh() {
String hostname = "192.168.88.128";
String username = "root";
String password = "a150321927";
try {
/* Create a connection instance */
Connection conn = new Connection(hostname);// 首先构造一个连接器,传入一个需要登陆的ip地址
/* 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.
*/
//模拟登陆目的服务器 传入用户名和密码 ,
//它会返回一个布尔值,true 代表成功登陆目的服务器,否则登陆失败
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");//执行linux命令
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).
*接收目标服务器上的控制台返回结果,读取br中的内容
*/
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-成功 非0-失败*/
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);
}
}
}
Authentication ok
Here is some information about the remote host:
Linux localhost.localdomain 2.6.9-78.ELsmp #1 SMP Wed Jul 9 15:39:47 EDT 2008 i686 i686 i386 GNU/Linux
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();,使用完毕记得关闭就可以了
- 利用Ganymed SSH-2模拟SSH操作
- 利用Ganymed SSH-2模拟SSH操作
- Ganymed SSH-2
- ganymed-ssh-2
- Ganymed SSH-2 for Java
- Ganymed SSH-2 for Java
- Ganymed SSH-2 for Java 示例
- Ganymed SSH-2 for Java系列1之 ganymed-ssh2介绍
- Ganymed SSH-2 for Java系列1之 ganymed-ssh2介绍
- Ganymed SSH-2 for Java系列1之 ganymed-ssh2介绍
- Ganymed SSH-2 for Java系列8之SFTPv3Client说明
- Ganymed SSH-2 for Java系列9之scpPut
- Ganymed SSH-2 for Java系列10之scpGet
- Ganymed SSH-2 for Java系列11之SCPClient
- 应用Ganymed SSH-2 for Java判断服务器状态
- Ganymed SSH-2 for Java系列8之SFTPv3Client说明
- Ganymed SSH-2 for Java系列9之scpPut
- Ganymed SSH-2 for Java系列10之scpGet
- DNS轮询解决负载均衡问题
- 关于库随机函数用法1
- 90分钟计划
- waitpid wait 综述
- 分享一下cookies操作(增、删、改、查)小经验
- 利用Ganymed SSH-2模拟SSH操作
- 5.1例题--判断闰年--2733
- Python正则表达式的用法
- Android Power Management
- Blueprint 3D:别出心裁的3D解谜游戏
- 单片机c编程
- Fedora 12,13,14,15,16/centOS/redhat EL 使用第三方yum 源
- 关于库随机函数用法2
- php文件路径信息