Java JSch远程执行Shell命令的方法
背景
项目需求,需要远程 ssh 登录到某个节点执行 shell 命令来完成任务。对于这种需求,如果不用 java 程序,直接 linux 的 ssh 命令就可以完成,但是在编码到程序中时需要相关的程序包来完成,本文主要介绍在 java 中如何使用 jsch 包实现 ssh 远程连接并执行命令。
jsch 简介
jsch 是java secure channel的缩写。jsch是一个ssh2的纯java实现。它允许你连接到一个ssh服务器,并且可以使用端口转发,x11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。框架jsch很老的框架,更新到2016年,现在也不更新了。
jsch 使用 shell 执行命令,有两种方法
- channelexec: 一次执行一条命令,一般我们用这个就够了。
- channelshell: 可执行多条命令,平时开发用的不多,根据需要来吧;
1. channelexec
每个命令之间用 ; 隔开。说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
每个命令之间用 && 隔开。说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
每个命令之间用 || 隔开。说明:|| 是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。
2. channelshell
对于channelshell,以输入流的形式,可执行多条指令,这就像在本地计算机上使用交互式shell(它通常用于:交互式使用)。如要要想停止,有两种方式:
发送一个exit命令,告诉程序本次交互结束;
使用字节流中的available方法,来获取数据的总大小,然后循环去读。
使用示例
1. 引入 pom 依赖
2. jsch 使用示例
在此封装了一个 shell 工具类,用来执行 shell 命令,具体使用细节在代码注释中有说明,可以直接拷贝并使用,代码如下:
上述工具类使用:
需要注意的点
如果需要后台执行某个命令,不能直接 <命令> + & 的方式执行,这样在 jsch 中不生效,需要写成这样的格式:<命令> > /dev/null 2>&1 &。比如要后台执行 sleep 60,需要写成 sleep 60 > /dev/null 2>&1
具体 issue 见这里:https://*.com/questions/37833683/running-programs-using-jsch-in-the-background
参考文档
https://www.cnblogs.com/slankka/p/11988477.html
https://blog.csdn.net/sinat_24928447/article/details/83022818
到此这篇关于java jsch远程执行shell命令的方法的文章就介绍到这了,更多相关java jsch远程执行shell命令内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
Java JSch远程执行Shell命令的方法
-
Java JSch远程执行Shell命令的方法
-
ssh java类的连接与远程命令执行(包括密钥连接) 博客分类: Java EE sshjava
-
java(jsp)执行ssh命令 在远程执行shell命令 博客分类: javaLinux javajspssh远程shell
-
linux的shell命令检测某个java程序是否执行
-
java(jsp)执行ssh命令 在远程执行shell命令 博客分类: javaLinux javajspssh远程shell
-
linux的shell命令检测某个java程序是否执行
-
Windows系统中Java调用cmd命令及执行exe程序的方法
-
Java中通过jsch来连接远程服务器执行linux命令
-
Windows系统中Java调用cmd命令及执行exe程序的方法