通过JSch远程调度linux

引用最新的依赖(官方的已经很久没更新了,这个是开源的)

复制代码
<dependency>
    <groupId>com.github.mwiede</groupId>
    <artifactId>jsch</artifactId>
    <version>2.27.2</version>
</dependency>

参考:解决com.jcraft.jsch.JSchException: Algorithm negotiation fail-CSDN博客

java 复制代码
import com.jcraft.jsch.*;

import java.io.InputStream;

public class SSHConnection {
    public static void main(String[] args) {
        JSch jsch = new JSch();
        Session session = null;

        try {
            // 1. 创建会话并连接
            session = jsch.getSession("账号名", "ip地址", 22);
            session.setConfig("StrictHostKeyChecking", "no");
            session.setPassword("密码");
            session.connect();
            System.out.println("SSH连接成功");

            // 2. 创建执行通道
            ChannelExec channelExec = (ChannelExec) session.openChannel("exec");

            // 3. 设置命令 - 这里测试环境变量是否加载
            String command = "source /etc/profile; source ~/.bashrc; echo $PATH; ls -lh";
            channelExec.setCommand(command);

            // 4. 设置输入输出流
            channelExec.setInputStream(null);
            channelExec.setErrStream(System.err);

            // 5. 获取输出流
            InputStream in = channelExec.getInputStream();

            // 6. 连接并执行命令
            channelExec.connect();
            System.out.println("执行命令: " + command);

            // 7. 读取命令输出
            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()) {
                    System.out.println("\n退出状态: " + channelExec.getExitStatus());
                    break;
                }
                Thread.sleep(100);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 8. 关闭连接
            if (session != null && session.isConnected()) {
                session.disconnect();
                System.out.println("SSH连接已关闭");
            }
        }
    }
}

运行结果

可根据上面代码进一步优化。

相关推荐
未济2 天前
linux 配置环境变量
linux
傲世仙尊2 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
_艾伦 耶格尔.2 天前
进程间通信
linux
AI职业加油站2 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
Liuqy-052 天前
Linux IO编程——静态库、动态库
linux
此冬歌咏2 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
彧azz2 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅2 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog2 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发