专业的JAVA编程教程与资源

网站首页 > java教程 正文

【Java开发】通过SSHClient实现远程执行Linux的SH脚本

temp10 2024-11-13 12:43:42 java教程 11 ℃ 0 评论

续之前的文章:

通过pscp.exe文件+小工具复制密码实现文件从windows上传到linux

【Java开发】通过SSHClient实现远程执行Linux的SH脚本

【Java开发】通过https://repo.maven.apache.org找到对应的jar包

【java开发】通过SSHClient实现文件上传到Linux

我想Java代码实现远程执行Linux的SH脚本

这样,我就能自定义一个jar工具,实现jar通过cmd方式上传到Linux远程服务器并更新。

(jar工具后续实现)

这里先上一下远程执行的SH代码

public static String shRun(String host, int port, String userName, String password, 
                           boolean hostKeyVerifierFlag, String shCmdText) {
    SSHClient ssh = null;
    Session session = null;
    Session.Command cmd = null;
    String result = "";
    try {
        ssh = new SSHClient();
        // 如果是首次连接服务器或者确定服务器是可信的,
        // 可以通过调整主机密钥验证策略来接受新的主机密钥。
        // 例如,在使用sshj库(假设SSHClient来自sshj库)时,
        // 可以使用PromiscuousVerifier(不推荐用于生产环境,仅用于测试或确认信任关系)。
        if (hostKeyVerifierFlag) {
            ssh.addHostKeyVerifier(new PromiscuousVerifier());
        }
        ssh.connect(host, port);
        ssh.authPassword(userName, password);

        // 假设ssh是已经连接到服务器的SSHClient实例
        session = ssh.startSession();

        cmd = session.exec(shCmdText);
        // 获取命令的输出流
        java.io.InputStream inputStream = cmd.getInputStream();
        java.util.Scanner scanner = new java.util.Scanner(inputStream).useDelimiter("\\A");
        String output = scanner.hasNext() ? scanner.next() : "";
        result += "脚本执行输出: " + output + ";";
        // 获取命令的错误流(如果有)
        java.io.InputStream errorStream = cmd.getErrorStream();
        scanner = new java.util.Scanner(errorStream).useDelimiter("\\A");
        String errorOutput = scanner.hasNext() ? scanner.next() : "";
        if (!errorOutput.isEmpty()) {
            result += "脚本执行错误: " + errorOutput + ";";
        }
        return result;
    } catch (Exception e) {
        return e.getMessage();
    } finally {
        try {
            if (cmd != null) {
                cmd.close();
            }
        } catch (Exception err) {

        }
        try {
            if (session != null) {
                session.close();
            }
        } catch (Exception err) {

        }

        try {
            if (ssh != null) {
                ssh.close();
            }
        } catch (Exception err) {

        }
    }
}


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表