通过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 小时前
LVS负载均衡
服务器·负载均衡·lvs
小成202303202654 小时前
Linux高级02
linux·开发语言
mounter6255 小时前
【硬核前沿】CXL 深度解析:重塑数据中心架构的“高速公路”,Linux 内核如何应对挑战?-- CXL 协议详解与 LSF/MM 最新动态
linux·服务器·网络·架构·kernel
++==5 小时前
Linux 进程间通信与线程同步技术详解:IPC 机制、线程 API、同步工具与经典同步问题
linux
特长腿特长5 小时前
centos、ubantu系列机的用户和用户组的结构是什么?具体怎么配置?用户组权限怎么使用?这篇文章持续更新,帮助你复习linux的基础知识
linux·运维·centos
zzzyyy5385 小时前
Linux环境变量
linux·运维·服务器
pluvium275 小时前
记对 xonsh shell 的使用, 脚本编写, 迁移及调优
linux·python·shell·xonsh
无级程序员6 小时前
centos7 安装 llvm-toolset-7-clang出错的问题解决
linux·centos
kebeiovo6 小时前
atomic原子操作实现无锁队列
服务器·c++
赛博云推-Twitter热门霸屏工具6 小时前
Twitter运营完整流程:从0到引流获客全流程拆解(2026)
运维·安全·自动化·媒体·twitter