Google sshxcute优化版+二次封装类

1.Google sshxcute优化版

源码下载: https://gitee.com/chengyuqiang/sshxcute

2.二次封装

package cn.hadron.util;

import java.util.HashMap;
import java.util.Map;
import net.neoremind.sshxcute.core.ConnBean;
import net.neoremind.sshxcute.core.IOptionName;
import net.neoremind.sshxcute.core.Result;
import net.neoremind.sshxcute.core.SSHExec;
import net.neoremind.sshxcute.exception.TaskExecFailException;
import net.neoremind.sshxcute.task.CustomTask;
import net.neoremind.sshxcute.task.impl.ExecCommand;
import net.neoremind.sshxcute.task.impl.ExecShellScript;

/**
 * sshxcute.jar二次封装类
 *  在执行命令时,命令前面已经是他的完全路径,多条命令用分号隔开
 *  参考文献 https://my.oschina.net/u/1866821/blog/479409
 * @author chengyuqiang
 *
 */
public final class SSHUtil {
    private SSHExec sshx = null;
    private ConnBean cb = null;

    public SSHUtil(String ip, String username, String password) {
        // 如果遇到失败,仍然想继续执行剩下的任务
        SSHExec.setOption(IOptionName.HALT_ON_FAILURE, true);
        // 修改错误日志输入目录
        SSHExec.setOption(IOptionName.ERROR_MSG_BUFFER_TEMP_FILE_PATH, "/var/log/sshxcute_err.msg");
        this.cb = new ConnBean(ip, username, password);
    }

    /**
     * 连接SSH,私有方法
     * @return
     */
    private boolean connect() {
        if (null == cb) {
            return false;
        }
        sshx = SSHExec.getInstance(cb);
        return sshx.connect();
    }

    /**
     * 执行命令
     * @param command
     * @return
     */
    public Result exec(String... cmd) {
        this.connect();
        // 执行的命令行任务
        CustomTask sampleTask = new ExecCommand(cmd);
        // 执行,并对执行后的结果进行处理
        try {
            return sshx.exec(sampleTask);
        } catch (TaskExecFailException e) {
            e.printStackTrace();
            return null;
        } finally {
            sshx.disconnect();
        }
    }

    /**
     * shellPath 代表脚本执行路径
     * @param shellPath
     * @return
     */
    public Result exeScript(String shellPath) {
        this.connect();
        CustomTask task = new ExecShellScript(shellPath);
        try {
            return sshx.exec(task);
        } catch (TaskExecFailException e) {
            e.printStackTrace();
            return null;
        } finally {
            sshx.disconnect();
        }
    }

    /**
     * 带参执行脚本
     * @param shellPath
     * @param args
     * @return
     */
    public Result exeScript(String shellPath, String args) {
        this.connect();
        CustomTask task = new ExecShellScript(shellPath, args);
        try {
            return sshx.exec(task);
        } catch (TaskExecFailException e) {
            e.printStackTrace();
            return null;
        } finally {
            sshx.disconnect();
        }
    }

    /**
     * 上传文件
     * @param localFile
     * @param remotePath
     */
    public boolean putFile(String localFile, String remotePath) {
        this.connect();
        try {
            sshx.uploadSingleDataToServer(localFile, remotePath);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            sshx.disconnect();
        }
    }

    /**
     * 上传目录
     * @param localPath
     * @param remotePath
     */
    public boolean putDir(String localPath, String remotePath) {
        this.connect();
        try {
            sshx.uploadAllDataToServer(localPath, remotePath);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            sshx.disconnect();
        }
    }

    /**
     * 解析结果
     * @param result
     * @return
     */
    public Map<String, String> parseResult(Result result) {
        if(null==result){
            System.out.println("Result空值!");
            return null;
        }
        Map<String, String> map = new HashMap<>();
        // Check result and print out messages.
        if (result.isSuccess) {
            map.put("isSuccess", "true");
            map.put("returnCode", result.rc + "");
            map.put("sysout", result.sysout);
        } else {
            map.put("isSuccess", "false");
            map.put("returnCode", result.rc + "");
            map.put("sysout", result.error_msg);
        }
        return map;
    }
    /**
     * 解析结果
     * @param result
     * @return
     */
    public String getString(Result result) {
        if(null==result){
            System.out.println("Result空值!");
            return null;
        }
        if (result.isSuccess) {
            return result.sysout;
        } else {
            return result.error_msg;
        }
    }

    /**
     * 测试方法
     * @param args
     */
    public static void main(String[] args) {
        SSHUtil ssh = new SSHUtil("192.168.2.91", "root", "123456");
        Result result=ssh.exec("date");
        Map<String, String> map=ssh.parseResult(result);
        for(String key:map.keySet()){
            System.out.println(key+":"+map.get(key));
        }
        System.out.println("-------------------------------------");
        result=ssh.exec("ls -l", "uname");
        map=ssh.parseResult(result);
        for(String key:map.keySet()){
            System.out.println(key+":"+map.get(key));
        }
        System.out.println("-------------------------------------");
        boolean success=ssh.putFile("/root/sshxcuteTest.sh", "/root/sshxcuteTest.sh");
        if(success){
            System.out.println("上传成功!");
        }else{
            System.out.println("上传失败!");
        }
        System.out.println("###-------------------------------------");
        //参数放到同一个字符串中,通过空格分割
        result=ssh.exeScript("/root/sshxcuteTest.sh", "hello world");
        System.out.println(ssh.getString(result));

    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区