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

news/2024/11/28 14:41:24/

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://www.ppmy.cn/news/653887.html

相关文章

JetBrains编程IDE将具备Ai助手功能,或将提高开发速度

近日JetBrains发布博客文章宣布&#xff0c;本周所有基于IntelliJ的IDE和.NET工具的EAP版本都将具备AI助手功能。而这些操作或许将提高开发效率&#xff0c;并且这些AI助手也是使用自家的**ERP**模型和OpenAI服务。 JetBrains表示&#xff0c;当下AI助手功能主要体现在IDE的两…

如何更换服务器的IP地址?

随着网站的发展或者服务器商的不靠谱都需要更换服务器IP地址&#xff0c;但是第一次更换难免会有些紧张或担心&#xff0c;网站瘫痪了怎么办&#xff1f;更换IP时出错了怎么办&#xff1f; 步骤一、首先确认新IP是否安全 你能从服务器商那里得到要更换到的新IP,可以通过一些IP…

怎么换外网IP地址 如何设置代理服务器上网

由于网络的飞速的发展&#xff0c;上网也是现代人必不可少的&#xff0c;由于很多小伙伴资讯我们怎么修改外网IP来做些网上的业务&#xff0c;其实简单来说就是修改自己本地IP地址&#xff0c;我们上网都会产生一个IP&#xff0c;有些工作需要想把它改成其他城市的&#xff0c;…

开启VPN和NAT服务

windows-1添加一张网卡 windows-1配置路由和远程访问服务器 windows-1添加用户授权 windows-3配置VPN 在这里插入图片描述 ping 内网地址

怎样更改网站服务器的ip地址,如何更改您的服务器IP地址

如果服务器移动或网络重构导致服务器需要新的服务器IP&#xff0c;请按照以下步骤更新许可证和系统。 1)在移动之前联系DirectAdmin以通知他们新的IP地址。包含旧的IP和许可证ID。请注意&#xff0c;如果您拥有内部许可证&#xff0c;则必须是提出此请求的数据中心。如果您无法…

阿里云服务器更改公网IP地址教程(两种情况)

阿里云服务器可以更换公网IP地址吗&#xff1f;可以的&#xff0c;但是有限制条件的&#xff0c;在阿里云ECS云服务器创建后6小时内是可以免费更换公网IP地址的&#xff0c;超过6小时更换服务器IP地址是有限制条件的&#xff0c;不懂云来详细说下阿里云服务器更换公网IP地址的详…

虚拟专用网VPN与网络地址转换NAT技术

1、专用网络或本地互联网 一方面现在随着个人电脑的增大&#xff0c;IP地址十分紧缺&#xff0c;所以如果为每一台电脑都分配个一个全球IP地址&#xff08;唯一的&#xff09;不太现实&#xff1b;另外一方面&#xff0c;很多机构&#xff08;比如大公司&#xff09;往往只需要…

青大数据结构【2017】【综合应用、算法分析】

关键字&#xff1a; 平衡二叉树、平均查找长度、单链表、二叉树中序遍历非递归 三、综合应用 平衡二叉树AVL定义&#xff1a;任意节点的子树的高度差都小于等于 1 ASL&#xff08;12*24*3&#xff09;/717/7 四、算法分析