最近做测试的自动化实现,需要实现在windows环境下通过跳板机登陆到测试机,运行测试机上某个shell脚本的功能,看了以前的一些参考代码,采用的是Runtime.exec("\"C:\\Program Files\\SecureCRT\\vsh.exe \" -pw 密码 ***@*** sh **.sh")这样的方式来实现的,后来试用了一下,发现通过跳板机到达测试机能实现,但是中间有点辗转,而且,登陆到测试机上以后执行shell脚本结果时好时坏,由于不太熟悉,个人觉得应该是流没有控制好,或者是线程之类的原因。于是寻找到另外一种方法来实现相同的功能,引入ganymed-ssh2-build210.jar。
Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。在使用它的过程中非常容易,只需要指定合法的用户名口令,或者授权认证文件,就可以创建到远程 Linux主机的连接,在建立起来的会话中调用该Linux主机上的脚本文件,执行相关操作。
使用方法:
在pom.xml中加入配置:
<dependency>
<groupId>ch.ethz.ganymed</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>build210</version>
</dependency>
使用实例:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class GanymedTest {
public static void main(String[] args) {
try {
Connection conn = new Connection("测试机IP");
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword("username",
"password");
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
Session sess = conn.openSession();
sess.execCommand("ls \n ");
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);
}
sess.close();
conn.close();
} catch (IOException e) {
e.printStackTrace(System.err);
System.exit(2);
}
}
}
这样即可直接通过用户名和密码直接登陆到测试机上,进行相关操作,不会出现线程、阻塞等引起的执行结果时好时坏的情况。