转:https://blog.csdn.net/qq_29690869/article/details/80396034
Java 通过 ssh 协议远程执行 linux 主机命令:
使用架包:ganymed-ssh2-build210.jar
public class SSH {
private String charset = null;
private String ip = null;
private String user = null;
private String password = null;
private Connection conn = null;
private Session session = null;
public SSH(String ipaddr, String user, String password) {
this.ip = ipaddr;
this.user = user;
this.password = password;
this.charset = Charset.defaultCharset().toString();
}
public void SSHexec(String[] cmd) {
if (this.StartConn()) {
for (int i = 0; i < cmd.length; i++) {
System.out.print(this.exeCmd(cmd[i]));
}
this.connClose();
}
}
private String exeCmd(String cmd) {
InputStream input = null;
String rs = null;
try {
session = conn.openSession();
session.execCommand(cmd);
input = session.getStdout();
rs = processStdout(input, charset);
session.close();
} catch (IOException e) {
e.printStackTrace();
}
return rs;
}
private String processStdout(InputStream input, String charset) {
byte[] buf = new byte[1024];
StringBuffer sb = new StringBuffer();
try {
while (input.read(buf) != -1) {
sb.append(new String(buf, charset));
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
private boolean StartConn() {
boolean succeed = false;
try {
conn = new Connection(ip);
conn.connect();
succeed = conn.authenticateWithPassword(user, password);
} catch (IOException e) {
e.printStackTrace();
}
return succeed;
}
private void connClose() {
conn.close();
}
}
调用实例:
SSH ssh = new SSH("10.10.90.110","root","123456");
//有些些命令运行前需要source /etc/profile,原因是你远程登录目标主机的并执行指令的环境变量和在目标主机上直接执行指令的环境变量不对等。
String[] cmds = {
"chmod a+x test.sh",
"source /etc/profile; java -jar myapp.jar >> msg.out 2>&1 &" };
ssh.SSHexec(cmds);