java实现远程执行Linux下的shell脚本

article/2025/10/30 5:48:47

java实现远程执行Linux下的shell脚本

    • 背景
    • 导入Jar包
    • 第一步:远程连接
    • 第二步:开启Session
    • 第三步:新建测试脚本文件
    • 结果
    • 报错

背景

最近有个项目,需要在Linux下的服务器内写了一部分Python脚本,业务处理却是在Java内,那么就想能不能在Java里面,来远程执行Linux下的Python脚本,就是把shell命令写到Java里面。于是上网查了下,还真有第三方jar库,ganymed-ssh2。专门给java提供远程执行ssh的一个第三方jar包。

那么什么是 ganymed-ssh2 呢?

Ganymed-SSH2的优点:

轻量级:Ganymed-SSH2的代码非常精简,易于学习和使用。

简单易用:Ganymed-SSH2提供了简单易用的API,尤其适合用于简单的SSH客户端开发。

纯Java编写:Ganymed-SSH2不需要任何本地库或外部依赖,可以在所有支持Java的平台上运行。

导入Jar包

<!-- ganymed-ssh2 -->
<dependency><groupId>ch.ethz.ganymed</groupId><artifactId>ganymed-ssh2</artifactId><version>build210</version>
</dependency>

我们可以在Maven里面引入 ganymed–ssh2 的jar包。

第一步:远程连接

我们想要去执行Linux下的shell命令,那我们第一步的操作就是应该去连接服务器,先和服务器打通才能进行下一步。

Connection connection = null;
//首先构造一个连接器,传入一个需要登陆的ip地址try {connection = new Connection(ip, 22);//连接connection.connect();//身份验证boolean isAuthenticated = connection.authenticateWithPassword(username, password);if (isAuthenticated) {log.info("身份验证成功");} else {throw new Exception("身份验证失败");}catch (Exception e) {e.printStackTrace();} finally {connection.close();
}

这里就引用了 ganymed–ssh2 的 Connection 方法,需要传入 服务器的Ip以及port端口。

第二步:开启Session

当我们连接上服务器后,我们就需要打开一个Session,来执行我们的脚本shell命令。

Session session = null;
try {//开启openSessionsession = connection.openSession();//把命令写入脚本,在执行该脚本session.execCommand("这里执行shell脚本");session.waitForCondition(ChannelCondition.CLOSED | ChannelCondition.EOF | ChannelCondition.EXIT_STATUS, 1000 * 3600);} catch (Exception e) {e.printStackTrace();
} finally {session.close();
}

如果想要执行的输出结果的话,我们可以加上InputStream输出流,来确认是否执行成功。

// 获得标准输出流
InputStream is = new StreamGobbler(session.getStdout());
BufferedReader brs = new BufferedReader(new InputStreamReader(is, "UTF-8"));
List<String> result = new ArrayList<>();
for (String line = brs.readLine(); line != null; line = brs.readLine()) {result.add(line);System.out.println(line);
}
if (result.size() == 0) {System.out.println(result);
}

第三步:新建测试脚本文件

最后,我们在Linux的服务器内,新建立一个test.sh脚本文件。

~

export PATH=/usr/local/bin:/usr/local/lib:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib
echo '成功执行shell命令'

image.png

这里执行成功的话就输出一行文字。

结果

万事俱备后,我们就来可以运行一下,看一下结果。

image.png

在控制台即可看到,通过InputStream输出流,我们获取到了测试脚本的执行结果。

那通过这,我们就可以来实现,定时执行某些Linux下的python脚本等等。

报错

如果大家按照此方法报错了(估计很大概率会报错),可以看一下我这篇文章,解决报错的方法。

报错解决方法


http://chatgpt.dhexx.cn/article/4LrLb7MY.shtml

相关文章

Java运行Python脚本

前段时间遇到了在JavaWeb项目中嵌入运行Python脚本的功能的需求。想到的方案有两种&#xff0c;一种是使用Java技术&#xff08;Jython或Runtime.exec&#xff09;运行Python脚本&#xff0c;另一种是搭建一个Python工程对外提供相应http或webservice接口。两种方案我都有实现&…

Java项目分层

MVC模式 在实际的开发中有一种项目的程序组织架构方案叫做MVC模式&#xff0c;按照程序 的功能将他们分成三个层&#xff0c;如下图&#xff1a;Modle层&#xff08;模型层&#xff09;、View层&#xff08;显示层&#xff09;、Controller层&#xff08;控制层&#xff09;。…

java项目收获总结_java开发项目收获心得

1 java开发项目收获心得 it行业现在的发展如日中天,很多人都纷纷走进这个行业,而java作为跨平台的编程语言更是受欢迎。java其实相对其他语言来说的确很有优势,但是也有点缺陷,但是以后发展到什么程度,谁都不知道。那么下面小编给大家说说java开发项目收获心得,希望能对你…

java查看jar包依赖_java项目开发中如何查找到项目依赖的jar包?

不管是java普通工程,还是java web项目,甚至是android项目,依赖包的管理有2种: 1.直接依赖jar包 这种方式简单直白,项目下载后在正确的ide或者稍微做转换就可以运行起来。比如java web工程的WEB-INF/lib下 只要按这个步骤Java Build Path=>Add Libraty=>Web App Libr…

Java小白必看:开发一个编程项目的完整流程(附100套Java编程项目源码+视频)

我相信很多Java新手都会遇到这样一个问题&#xff1a;跟着教材敲代码&#xff0c;很容易&#xff1b;但是让他完整的实现一个应用项目&#xff0c;却不会&#xff1b;不知道从哪里开始&#xff0c;不知道实现一个项目的完整流程是怎样的&#xff0c;看似很简单的一个问题&#…

分享67套基于Java开发的Java毕业设计实战项目(含源码+毕业论文)【新星计划】

【新星计划】分享67套基于Java开发的Java毕业设计实战项目(含源码毕业论文) 基于Java开发的Java毕业设计实战项目 本文中的所有主题都来自互联网。如果您侵犯您的权利&#xff0c;请及时联系Blogger&#xff0c;博主将及时处理。 投诉邮箱&#xff1a;1919101926qq.com (没事…

分享一些我的学习方法

赖勇浩&#xff08;http://laiyonghao.com &#xff09; 经常听到和看到一些前辈提起搞编程这一行最大的痛苦在于知识的更新太频繁&#xff0c;如同逆水行舟&#xff0c;不进则退&#xff0c;稍一松懈&#xff0c;就跟不上潮流。的确如此&#xff0c;既然身在 IT 界&#xff0c…

规划之路:SLAM学习经验分享

针对想学SLAM的提问&#xff0c;我觉得我还是有一定的发言权。 作为一个刚入坑SLAM一年多的初学者&#xff0c;首先想说的就是这个研究方向比较广&#xff0c;大方向按搭载传感器分为激光SLAM和视觉SLAM两种&#xff0c;激光SLAM搭载激光雷达&#xff0c;视觉SLAM搭载单目、双目…

学习经验分享之十三:如何撰写论文

一、文献积累 顶刊or顶会&#xff1a; AAAI: American Association for AI National Conference CVPR: IEEE Conf on Comp Vision and Pattern Recognition IJCAI: Intl Joint Conf on AI ICCV: Intl Conf on Computer Vision ICML: Intl Conf on Machine Learning KDD: Knowl…

学习经验分享【25】记录个人的一些学习体会(更新TensorBoard)

本博文将记录和分享个人的一些学习工作体会和踩过的坑&#xff0c;希望对大家能有帮助。 一、对比实验 用yolov5l.ymal和yolov5n.ymal文件&#xff0c;然后加载yolov5s.pt后&#xff0c;训练得到的模型效果极差&#xff08;mAP差30%&#xff09;&#xff0c;重新训练后换为yol…

个人学习方法分享

hi&#xff0c;大家好&#xff0c;今天来分享一下&#xff0c;我的一些学习经验&#xff0c;希望对大家学习有帮助。 我的学习方法 学习计划 核心思想&#xff1a;把自己像产品一样打造&#xff0c;就像张一鸣经典语录&#xff1a;run company as a product 制定目标 首先学习需…

分享自己学英语的经验

其实学好英语对于一个人真的很有用&#xff0c;尤其是对工程师来说&#xff0c;各种文献资料&#xff0c;代码&#xff0c;最新的技术文章&#xff0c;太多是英文的了&#xff0c;一个典型的例子就是&#xff0c;作为一个程序员和外国客户做过培训&#xff0c;当其他同事英语没…

【学习经验分享NO.21】学习资料分享(持续更新)

本博客将收集整理人工智能深度学习相关资料&#xff0c;进行整理&#xff0c;供大家学习使用。如果有需要帮忙整理的请留言。将不断更新&#xff0c;请持续关注。 一、深度学习论文资料 链接&#xff1a;https://pan.baidu.com/s/18LO5df0dp9-IE8Z3aFyrPg 提取码&#xff1a;c…

学习经验分享之十:Pycharm

前 言&#xff1a;作Pycharm有社区版和正式版&#xff0c;初学深度学习算法的小伙伴可能会选择社区版&#xff0c;因为正式版只有30天试用期&#xff0c;但是在实际使用过程中&#xff0c;社区版会出现很多功能上的不足&#xff0c;比如无法网上连接服务器&#xff0c;以及其他…

个人学习经验

这是一个ubuntu上学习cv遇到的一些常见问题的帮助和解决方法。 有些东西我会慢慢往上面加 文章目录 创建新环境conda添加镜像源安装模块在jupyter中使用新环境在pycharm中使用新环境 使用scp命令传输文件使用mobaxterm连接服务器 转数据集标注格式anaconda上安装好用的插件使用…

学习经验分享之十一:硕士论文撰写心得

硕士论文由于需要学校提交教育部盲审&#xff0c;导致通过率并不能达到百分百。翟天临事件之后&#xff0c;盲评通过率明显变低一般按照学科分布来说&#xff0c;盲审通过率最低的是工学&#xff0c;通过了为69.9%&#xff0c;其次为哲学&#xff0c;通过率为73.8%&#xff0c;…

我的 C# 学习经验分享

.NET 20 周年的学习挑战赛刚结束了第一阶段&#xff0c; 不知道各位小伙伴参加了没有 &#xff1f; 有人问现在学习 C# 是不是有点过时 &#xff1f; 也有人问现在 C# 能做什么 &#xff1f;更有人问学习 C# 能否找到工作 &#xff1f; 或者你从不同的专家 &#xff0c;不同的从…

分享学习语言的经验

在人类所制造的工具中&#xff0c;有的可以将人送上月球&#xff0c;有的可以驾驭原子的火焰&#xff0c;但是只有计算机软件才能透彻的返照出人类的心智。 --《Java与模式》 软件能够返照出人类的心智&#xff0c;那么计算机语言就是我们展现心智的基石。经常在一些论坛上和贴…

分享一些自己的学习经验和技巧

毕业两年多&#xff0c;工作三年多&#xff0c;技术水平也不是什么出类拔萃&#xff0c;万里挑一的地步&#xff0c;从最初的Java工程师&#xff0c;到产品&#xff0c;再到大数据&#xff0c;到最后的运维工程师&#xff0c;研发工程师&#xff0c;短短三年多&#xff0c;总是…

爬虫学习经验分享-------某点评网站

某点评网站爬虫分享----0基础学习&#xff0c;解决反爬&#xff0c;加密&#xff0c;ip代理&#xff0c;封ip“403 Forbidden”等问题。 最近有个调查的项目&#xff0c;其中包含了对于网络数据的爬取。而之前我并没学过网络爬虫&#xff0c;因此我也抱着学习的心态来学习如何爬…