程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java中使用JSCH來實現連接遠程服務器執行linux命令

Java中使用JSCH來實現連接遠程服務器執行linux命令

編輯:JAVA綜合教程

Java中使用JSCH來實現連接遠程服務器執行linux命令


有時候你可能需要通過代碼來控制執行linux命令實現某些功能。

針對這類問題可以使用JSCH來實現,具體代碼如下:

public class CogradientImgFileManager{

    private static final Logger log     = LoggerFactory.getLogger(CogradientImgFileManager.class);

    private static ChannelExec          channelExec;

    private static Session              session = null;

    private static int                  timeout = 60000;    

    // 測試代碼
    public static void main(String[] args){
        try{
            versouSshUtil("10.8.12.189","jmuser","root1234",22);
            runCmd("java -version","UTF-8");
        }catch (Exception e){
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * 連接遠程服務器
     * @param host ip地址
     * @param userName 登錄名
     * @param password 密碼
     * @param port 端口
     * @throws Exception
     */
    public static void versouSshUtil(String host,String userName,String password,int port) throws Exception{
        log.info("嘗試連接到....host:" + host + ",username:" + userName + ",password:" + password + ",port:"
                + port);
        JSch jsch = new JSch(); // 創建JSch對象
        session = jsch.getSession(userName, host, port); // 根據用戶名,主機ip,端口獲取一個Session對象
        session.setPassword(password); // 設置密碼
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config); // 為Session對象設置properties
        session.setTimeout(timeout); // 設置timeout時間
        session.connect(); // 通過Session建立鏈接
    }

    /**
     * 在遠程服務器上執行命令
     * @param cmd 要執行的命令字符串
     * @param charset 編碼
     * @throws Exception
     */
    public static void runCmd(String cmd,String charset) throws Exception{
        channelExec = (ChannelExec) session.openChannel("exec");
        channelExec.setCommand(cmd);
        channelExec.setInputStream(null);
        channelExec.setErrStream(System.err);
        channelExec.connect();
        InputStream in = channelExec.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in, Charset.forName(charset)));
        String buf = null;
        while ((buf = reader.readLine()) != null){
            System.out.println(buf);
        }
        reader.close();
        channelExec.disconnect();
    }

}
   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved