java代码远程执⾏shell脚本1、脚本信息如下:
2、代码如下:
public class SSHTool {
private Connection conn;
private String ipAddr;
private Charset charset = StandardCharsets.UTF_8;
private String userName;
private String password;
public SSHTool(String ipAddr, String userName, String password, Charset charset) {
this.ipAddr = ipAddr;
this.userName = userName;
this.password = password;
if (charset != null) {
this.charset = charset;
}
}
/**
* 登录远程Linux主机
*
* @return 是否登录成功
*/
private boolean login() {
conn = new Connection(ipAddr);
try {
// 连接
// 认证
return conn.authenticateWithPassword(userName, password);
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* 执⾏Shell脚本或命令
*
* @param cmds 命令⾏序列
* @return 脚本输出结果
*/
public StringBuilder exec(String cmds) throws IOException {
InputStream in = null;
StringBuilder result = new StringBuilder();
try {
if (this.login()) {
// 打开⼀个会话
Session session = conn.openSession();
in = Stdout();
result = this.processStdout(in, this.charset);
conn.close();
}
}
} finally {
if (null != in) {
in.close();
}
}
return result;
}
/**
* 解析流获取字符串信息
*
* @param in 输⼊流对象
* @param charset 字符集
* @return 脚本输出结果
*/
public StringBuilder processStdout(InputStream in, Charset charset) throws FileNotFoundException { byte[] buf = new byte[1024];
StringBuilder sb = new StringBuilder();
try {
// 此⽅法是休息10秒后最后⼀次性输出2⾏数据
int length;
while ((length = in.read(buf)) != -1) {
sb.append(new String(buf, 0, length));
}
// 这个会按照脚本⼀步⼀步执⾏,中途有休息10秒。
BufferedReader reader = null;
shell脚本返回执行结果
String result = null;
reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
while ((result = adLine()) != null) {
System.out.println(result);
}
} catch (IOException e) {
e.printStackTrace();
}
return sb;
}
// 脚本执⾏结束返回
public static void main(String[] args) throws IOException {
SSHTool tool = new SSHTool("192.168.80.202", "root", "123456", StandardCharsets.UTF_8);
System.out.("bash /opt/module/test.sh"));
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论