通过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连接已关闭");
            }
        }
    }
}

运行结果

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

相关推荐
大筒木老辈子1 小时前
Linux笔记---计算机网络概述
linux·笔记·计算机网络
小白考证进阶中2 小时前
终于赶在考试券过期前把Oracle OCP证书考下来了!
运维·数据库·oracle·dba·开闭原则·数据库管理员
keep__go3 小时前
postgresql9.2.4 跨版本升级14.6
linux·运维·数据库·postgresql
Doris_LMS3 小时前
Git的强软硬回退(三)
运维·服务器·数据库·git·idea
深思慎考3 小时前
LinuxC++项目开发日志——高并发内存池(1-定长内存池)
linux·c++
(Charon)3 小时前
基于 epoll 的高并发服务器原理与实现(对比 select 和 poll)
运维·服务器
Jtti3 小时前
在 Debian 系统上清理缓存的方式和具体操作方法
运维·缓存·debian
伐尘4 小时前
【mac】如何在 macOS 终端中高效查找文件:五种实用方法
运维·macos
川石课堂软件测试4 小时前
Oracle 数据库如何查询列
linux·数据库·sql·功能测试·oracle·grafana·prometheus
zzu123zsw5 小时前
第15章 Jenkins最佳实践
运维·jenkins