vieyahn2017 / iBlog

44 stars 0 forks source link

12.26 java远程ssh工具jsch #383

Closed vieyahn2017 closed 3 months ago

vieyahn2017 commented 3 years ago

java远程ssh小记——jsch

https://blog.csdn.net/m47838704/article/details/79367328

vieyahn2017 commented 3 months ago

java测试应用-jsch远程执行shell命令

0、maven增加依赖:

com.jcraft jsch 0.1.55

1、创建连接:

JSch jsch = new JSch(); Session session = jsch.getSession(user, ip, port); session.setPassword(password);
//跳过登录验证
session.setConfig("StrictHostKeyChecking", "no"); session.setTimeout(connectTimeout); session.connect();

2、打开会话并发送指令

2.1 shell模式

shell模式就是模拟一个伪终端登录到服务器中,可以自行执行命令

Channel channel = session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect();

2.2 exec模式

exec模式即为预先输入命令,将命令发送至服务器,并接受命令返回的结果

Channel channel = session.openChannel("exec");
System.out.println("cmd:\t" + cmd);
ChannelExec channelExec = (ChannelExec) channel;
channelExec.setCommand(cmd);
channel.setInputStream(null);
channelExec.setErrStream(System.err);
channelExec.connect();
channel.connect();

3、获取命令执行结果

InputStream inputStream = channelExec.getInputStream(); ArrayList output = new ArrayList<String>(); //结果保存至ArrayList中 String line; byte[] tmp=new byte[1024]; while(true){
 while(inputStream.available() > 0){  int i=inputStream.read(tmp, 0, 1024);  if(i<0){
    break;
    }  line = new String(tmp, 0, i);  output.add(line);  System.out.print(line);  }  if(channel.isClosed()){  if(inputStream.available() > 0) {
continue;
}  System.out.println("exit-with: "+channel.getExitStatus());  break;  } }

4、关闭所有通道

channel.disconnect(); session.disconnect();

5、输出结果已经保存在上面定义的output变量中,拿取该变量即可进行下一步操作