Java使⽤SSH协议连接到远程Shell执⾏脚本
使⽤场景
有时候我们希望对某服务器进⾏⼀定的操作但⼜不想在上边装⼀个服务端程序
解决⽅案
我了⼀些java ssh2的⼯具,如:Jsch、SSHD、SSHJ。最终选择先试试Jsch来实现远程执⾏shell指令
吐槽
Jsch 的实例代码和源码写的和shi⼀样,也可能是我⽔平不够,理解不了(狗头)
我写了个⼯具类可以直接使⽤,⽣产环境谨慎使⽤
import com.jcraft.jsch.*;
import java.io.InputStream;
public class ShellUtil {
private final Session session;
public ShellUtil(String host, String user, String password, int port) throws JSchException {
this.session = new JSch().getSession(user, host, port);
session.setPassword(password);
session.setConfig("PreferredAuthentications", "password"); //⾸选通过密码进⾏⾝份认证,否则建⽴连接会花费很久
session.setConfig("StrictHostKeyChecking", "no");          //不进⾏严格的主机密钥检查
}
public String exec(String command) throws Exception {
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
channel.setInputStream(null);
((ChannelExec) channel).);
InputStream in = InputStream();
// Exec thread 启动
//有些 command 可能执⾏很长时间, 读取执⾏结果时需要等待
shell代码
StringBuilder res = new StringBuilder();
byte[] tmp = new byte[1024];
while (in.available() > 0 || !channel.isClosed()) {
if (!channel.isClosed()) Thread.sleep(200);
res.append(new String(tmp, 0, in.read(tmp, 0, 1024)));
}
channel.disconnect();
session.disconnect();
String();
}
public static void main(String[] args) throws Exception {
ShellUtil shellUtil = new ShellUtil("server", "root", "root", 22);
System.out.("docker ps"));
}
}
我写的代码也和shi⼀样,请⼤佬多指教