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

运行结果

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

相关推荐
AI科技星30 分钟前
张祥前统一场论宇宙大统一方程的求导验证
服务器·人工智能·科技·线性代数·算法·生活
魂万劫43 分钟前
如何在虚拟机VM上|Linux环境内安装windows
linux·运维·服务器·windows
序属秋秋秋1 小时前
《Linux系统编程之进程控制》【进程等待】
linux·c语言·c++·进程·系统编程·进程控制·进程等待
zfj3211 小时前
top 命令中的 wa (IO wait) 指标,理论上几乎完全是由磁盘IO(包括swap)引起的,而不是网络IO
linux·网络·top·iowait
Xの哲學1 小时前
Linux网卡注册流程深度解析: 从硬件探测到网络栈
linux·服务器·网络·算法·边缘计算
不哦罗密经1 小时前
python相关
服务器·前端·python
数字化转型20251 小时前
SAP Signavio 在风机制造行业的深度应用研究
大数据·运维·人工智能
用户6135411460161 小时前
libicu-62.1-6.ky10.x86_64.rpm 安装步骤详解(麒麟V10系统)
linux
WordPress学习笔记2 小时前
wordpress根据分类ID调用分类名称和分类描述
运维·wordpress
qq_455760852 小时前
docker - 镜像、存储卷和网络深入理解
运维·docker·容器