前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >通过JSch运行远程linux主机上的shell脚本

通过JSch运行远程linux主机上的shell脚本

作者头像
字母哥博客
发布于 2020-09-23 07:15:31
发布于 2020-09-23 07:15:31
2.2K00
代码可运行
举报
运行总次数:0
代码可运行

如果您看完文章之后,觉得对您有帮助,请帮我点个赞,您的支持是我不竭的创作动力!

运行远程主机上的shell脚本

下面的例子是教给大家如何通过java程序,运行远程主机上的shell脚本。(我讲的不是一个黑客学习教程,而是使用用户名密码去执行有用户认证资格的主机上的shell脚本)。并且通过java程序获得shell脚本的输出。 首先通过maven坐标引入JSch依赖库,我们正是通过JSch去执行远程主机上的脚本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

当然以下java代码可执行的的前提是,远程主机已经开通SSH服务(也就是我们平时登录主机所使用的服务)。

远程shell脚本

下面的代码放入一个文件:hello.sh,脚本的内容很简单只是用来测试,回显输出“hello <参数1> ”

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#! /bin/sh
echo "hello $1\n";

然后我把它放到远程主机的/root目录下面,远程主机的IP是1.1.1.1(当然我真实测试时候不是这个IP,我不能把我的真实IP写到这个文章里面,以免被攻击)。并且在远程主机上,为这个脚本设置可执行权限,方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ chmod +x hello.sh

本地java程序

我们可以使用下面的代码,去远程的linux 主机执行shell脚本,详细功能请看代码注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.jcraft.jsch.*;
import java.io.IOException;
import java.io.InputStream;
public class RunRemoteScript {
//远程主机IP
private static final String REMOTE_HOST = "1.1.1.1";
//远程主机用户名
private static final String USERNAME = "";
//远程主机密码
private static final String PASSWORD = "";
//SSH服务端口
private static final int REMOTE_PORT = 22;
//会话超时时间
private static final int SESSION_TIMEOUT = 10000;
//管道流超时时间(执行脚本超时时间)
private static final int CHANNEL_TIMEOUT = 5000;
public static void main(String[] args) {
//脚本名称及路径,与上文要对上
String remoteShellScript = "/root/hello.sh";
Session jschSession = null;
try {
JSch jsch = new JSch();
//SSH授信客户端文件位置,一般是用户主目录下的.ssh/known_hosts
jsch.setKnownHosts("/home/zimug/.ssh/known_hosts");
jschSession = jsch.getSession(USERNAME, REMOTE_HOST, REMOTE_PORT);
// 密码认证
jschSession.setPassword(PASSWORD);
// 建立session
jschSession.connect(SESSION_TIMEOUT);
//建立可执行管道
ChannelExec channelExec = (ChannelExec) jschSession.openChannel("exec");
// 执行脚本命令"sh /root/hello.sh zimug"
channelExec.setCommand("sh " + remoteShellScript + " zimug");
// 获取执行脚本可能出现的错误日志
channelExec.setErrStream(System.err);
//脚本执行结果输出,对于程序来说是输入流
InputStream in = channelExec.getInputStream();
// 5 秒执行管道超时
channelExec.connect(CHANNEL_TIMEOUT);
// 从远程主机读取输入流,获得脚本执行结果
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) break;
//执行结果打印到程序控制台
System.out.print(new String(tmp, 0, i));
}
if (channelExec.isClosed()) {
if (in.available() > 0) continue;
//获取退出状态,状态0表示脚本被正确执行
System.out.println("exit-status: "
+ channelExec.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
}
}
channelExec.disconnect();
} catch (JSchException | IOException e) {
e.printStackTrace();
} finally {
if (jschSession != null) {
jschSession.disconnect();
}
}
}
}

最终在本地控制台,获得远程主机上shell脚本的执行结果。如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hello zimug
exit-status: 0

当然,我只是为大家演示这样一个例子,上面的代码可以通过更好的封装,从而提供更简单的使用方式。

喜欢 (1)or分享 (0)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Jsch进行安全的文件上传及下载
本文介绍在Java中如何使用基于SSH的文件传输协议(SFTP)将文件从本地上传到远程服务器,或者将文件在两个服务器之间安全的传输。我们先来了解一下这几个协议
字母哥博客
2020/10/23
2.9K0
JSCH连接ssh终端执行文件操作
JSch是一个纯Java实现的SSH2协议的客户端库。它允许您在Java应用程序中进行安全的远程登录、文件传输和执行命令。您可以使用JSch来连接到远程服务器并执行各种操作。 导入pom包
查拉图斯特拉说
2023/10/25
6850
Java如何调用Linux命令
由于有不少java代码,格式可能在手机上显示比较乱,可以点击最下面阅读原文查看比较整洁的格式 (方式一)适合Java调用本地的Liunx无须任何依赖包 Java代码 /*** * 第一种方法,仅仅执行命令无须关注返回结果 * @throws Exception */ public static void exeCmd() throws Exception{ Runtime r = Runtime.getRuntime(); //执行linux命令,不关心返回结果,此
我是攻城师
2018/05/14
5.6K0
JSch - Java Secure Channel : java 代码实现服务器远程操作
JSch允许您连接到sshd服务器并使用端口转发,X11转发,文件传输等,您可以将其功能集成到您自己的Java程序中。JSch获得BSD格式许可证。
微风-- 轻许--
2022/04/13
2K0
JSch - Java Secure Channel : java 代码实现服务器远程操作
java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
1、java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息。
别先生
2018/10/15
5.1K0
Flink使用代码提交任务
前言 本文Flink使用版本1.12.7 代码提交任务 准备文件夹和文件 hadoop fs -mkdir -p /jar/userTask hadoop fs -mkdir -p /jar/flink12/libdist hadoop fs -mkdir -p /jar/flink12/lib 拷贝需要的文件 hadoop fs -put $FLINK_HOME/examples/batch/WordCount.jar /jar/userTask/WordCount.jar hadoop fs -put
码客说
2023/01/08
1.7K0
java可以使用ssh访问linux的框架有哪些
在写项目中发现需要使用到一些ssh去操作Linux的一些命令。然后对此展开了一个研究调研,看一下有能否哪一些框架适合现在去做一些对应的ssh的操作。这一些复杂的命令,选择一个合适的框架是非常重要的。有的时候当你可能去实现某一些业务的时候,发现其中的某一个类没有你想要的方法。这就比较苦恼,也不可能短时间内去跟作者提issue。因为那需要很漫长的时间。
查拉图斯特拉说
2024/01/17
5710
java可以使用ssh访问linux的框架有哪些
实战:第十篇:使用Java代码获取Linux系统执行命令后的结果
需求一:使用Java代码获取Linux系统执行命令后的结果 需求二:获取xml节点数据 解答: import java.io.*; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.util.*; import java.util.concurrent.CountDownLatch; import java.util.regex.Matcher
Java廖志伟
2022/09/28
1.5K0
实战:第十篇:使用Java代码获取Linux系统执行命令后的结果
sftp使用方法_sftp服务
参考:https://www.jianshu.com/p/64d571913185
全栈程序员站长
2022/11/10
5.5K0
使用JSch库进行SFTP连接
JSch是一个Java库,用于实现SSH2协议。JSch可以用于连接SSH服务器并进行各种远程操作,如文件传输、端口转发、远程执行命令等。
品茗IT
2023/10/22
1.5K0
基于JSCH的简易服务监控服务-WatchDog
主要功能为项目失效后自动重启,重启失败或者指定多少秒以后依旧未恢复正常的话就发送短信给指定维护人员。
Diuut
2022/11/22
1.1K0
Java: SpringBoot通过SSH远程执行命令
Java通过SSH jar包,远程连接Host进行命令执行,支持接收正常返回结果以及异常结果
Freedom123
2024/03/29
4150
7.Jenkins插件安装使用帮助说明
项目描述: Jenkins流水线步骤,提供SSH工具,如命令执行或文件传输,以实现持续交付。 项目地址: https://github.com/jenkinsci/ssh-steps-plugin
全栈工程师修炼指南
2022/09/29
2K0
7.Jenkins插件安装使用帮助说明
JSch - Java实现的SFTP(文件上传详解篇)
  JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。
别先生
2018/10/15
13.1K0
shell脚本介绍,shell脚本结构和执行方式,date命令的用法,shell脚本中的变量简介
  Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
端碗吹水
2020/09/23
2.6K0
shell脚本介绍,shell脚本结构和执行方式,date命令的用法,shell脚本中的变量简介
org.apache.commons.net.MalformedServerReplyException: Could not parse response code. Server Reply: S
案例代码,参考:https://blog.csdn.net/tengdazhang770960436/article/details/43237369,如下所示:
别先生
2021/10/29
2.1K0
使用Jenkins通过Publish Over SSH插件远程控制主机执行脚本
192.168.1.18 :Jenkins、CentOS 7.5.1804、Docker 19.03.13 192.168.1.20:K8s_Node2/Gitlab、CentOS 7.5.1804、Docker 19.03.13
非著名运维
2022/06/22
1.8K0
使用Jenkins通过Publish Over SSH插件远程控制主机执行脚本
Java工具集-JSch连接远程服务器工具类
代码示例 import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; /** * @program: simple_tools * @description: 连接远程ES通道 * @author: Mr.chen * @create: 2020-04-27 13:52 **/ public class JschUtil { /** * 创建与远程跳板机的连接 */ private static
cwl_java
2020/05/06
1.8K0
linux定时执行shell脚本「建议收藏」
很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据、数据库数据等 不适合人工经常做的一些操作这里简单说下
全栈程序员站长
2022/10/03
5.4K0
linux定时执行shell脚本「建议收藏」
shell脚本实例精讲_shell脚本编程实例
shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
全栈程序员站长
2022/11/10
1.3K0
推荐阅读
相关推荐
使用Jsch进行安全的文件上传及下载
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文