有时候项目会要求远程登录到主机进行脚本执行,本来以为通过跳板机连接到主机的,使用SSH会有问题,
事实证明,使用SSH可以实现直连
import java.io.InputStream;
import java.nio.charset.Charset;
import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.ConnectionInfo;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class testSSH {
private String ip = "****";//连接的ip
private String user ="***";//登录名
private String password = "";//登录密码
private static final int TIME_OUT = 1000 * 5 * 60;//连接超时设置
private String charset = Charset.defaultCharset().toString();
public boolean testShell(){
boolean flag = false;
InputStream stdOut = null;
InputStream stdErr = null;
String outStr = "";
String outErr = "";
String shell = "***";//需要执行shell命令
try {
System.out.println(ip);
Connection con = new Connection(ip);
System.out.println("连接打开");
ConnectionInfo info = con.connect();
boolean result = con.authenticateWithPassword(user, password);
System.out.println("登陆成功");
Session session = con.openSession();
System.out.println("打开会话");
session.execCommand(shell);
System.out.println("成功");
stdOut = new StreamGobbler(session.getStdout());//获取脚本执行的返回值
outStr = processStream(stdOut, charset);//
stdErr = new StreamGobbler(session.getStderr());//处理返回信息
outErr = processStream(stdErr, charset);
session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
System.out.println("outStr=" + outStr);
System.out.println("outErr=" + outErr);
flag = true;
} catch (Exception ex) {
System.out.println(ex.getLocalizedMessage());
}
return flag;
}
private String processStream(InputStream in, String charset) throws Exception {
byte[] buf = new byte[1024];
StringBuilder sb = new StringBuilder();
while (in.read(buf) != -1) {
sb.append(new String(buf, charset));
}
return sb.toString();
}
public static void main(String args[]){
testSSH test = new testSSH();
test.testShell();
}
}