java在远程服务器上执行终端命令并获得返回结果

最近经常会用到java到指定机器上执行终端命令并且获得返回结果,所以借此机会来记录一下

1.首先通过ip,用户名,密码链接到远程服务器上,然后执行终端命令

userName:主机的用户名,password:密码,ipAddr:主机ip地址,cmd:你要执行的命令

    public String execute(String userName, String password, String ipAddr, String cmd) {
        String result = "";
        boolean isAuthed = false;
        try {
            if (InetAddress.getByName(ipAddr).isReachable(1500)) {
                Connection conn = new Connection(ipAddr);
                conn.connect();
                isAuthed = conn.authenticateWithPassword(userName, password);
                if (isAuthed) {
                    Session session = conn.openSession();//打开一个会话
                    session.execCommand(cmd);
                    result = processStdout(session.getStdout());
                    //如果为得到标准输出为空,说明脚本执行出错了
                    if (StringUtils.isBlank(result)) {
                        log.info("得到标准输出为空,链接conn:" + conn + ",执行的命令:" + cmd);
                        result = processStdout(session.getStderr());
                    } else {
                        log.info("执行命令成功,链接conn:" + conn + ",执行的命令:" + cmd);
                    }

                    session.close();
                    conn.close();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

2.获取终端命令的返回结果

    private static String processStdout(InputStream in) {
        InputStream stdout = new StreamGobbler(in);
        StringBuilder buffer = new StringBuilder();
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(stdout, StandardCharsets.UTF_8));
            String line;
            while ((line = br.readLine()) != null) {
                buffer.append(line).append("\n");
            }
        } catch (IOException e) {
            log.error("解析脚本出错:" + e.getMessage());
        }
        return buffer.toString();
    }

需要注意的是,如果想输入多条命令,命令之间可以用" && "连接,比如 "cd /home && ls"

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值