日期:2014-05-16  浏览次数:20622 次

java通过SSH连linux运行shell ,解压linux上的压缩包

在写代码前请下载:ganymed-ssh2-build210.jar

package gany;

import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
/****
*
* @author mym
*
*/
public class mymGany {
public static void main(String args[]) {
try {
Connection connection = new Connection("192.168.32.200");// 创建一个连接实例
connection.connect();// Now connect
boolean isAuthenticated = connection.authenticateWithPassword("root", "123456");// Authenticate
if (isAuthenticated == false)throw new IOException("user and password error");
Session sess = connection.openSession();// Create a session
System.out.println("start exec command.......");
sess.requestPTY("bash");
sess.startShell();
InputStream stdout = new StreamGobbler(sess.getStdout());
InputStream stderr = new StreamGobbler(sess.getStderr());
BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(stdout));
BufferedReader stderrReader = new BufferedReader(new InputStreamReader(stderr));
PrintWriter out = new PrintWriter(sess.getStdin());
out.println("cd /root/mym");
out.println("ll");
out.println("tar -zxvf mysql-5.0.87-linux-i686-glibc23.tar.gz");
out.println("ll");
out.println("exit");
out.close();
sess.waitForCondition(ChannelCondition.CLOSED|ChannelCondition.EOF | ChannelCondition.EXIT_STATUS,30000);
System.out.println("下面是从stdout输出:");
while (true) {
String line = stdoutReader.readLine();
if (line == null)break;
System.out.println(line);
}
System.out.println("下面是从stderr输出:");
while (true) {
String line = stderrReader.readLine();
if (line == null)break;
System.out.println(line);
}
System.out.println("ExitCode: " + sess.getExitStatus());
sess.close();/* Close this session */
connection.close();/* Close the connection */

} catch (IOException e) {
e.printStackTrace(System.err);
System.exit(2);
}
}
}
/*****
* 总结使用步骤:
*
* 1.首先构造一个连接器,传入一个需要登陆的ip地址 Connection conn = new Connection(ipAddr);
* conn.connect(); // 连接
*
*
* 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();
*
* 需要说明的是:
* 1.通过第2步认证成功后,当前目录就位于/home/username/目录之下,你可以指定脚本文件所在的绝对路径,或者通过cd导航到脚本文件所在的目录
* ,然后传递执行脚本所需要的参数,完成脚本调用执行。
*
* 2.执行脚本以后,可以获取脚本执行的结果文本,需要对这些文本进行正确编码后返回给客户端,避免乱码产生。
*
* 3.如果你需要执行多个linux控制台脚本,比如第一个脚本的返回结果是第二个脚本的入参,你必须打开多个Session,也就是多次调用 Session
* sess = conn.openSession();,使用完毕记得关闭就可以了
*******/