亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java如何通過(guò)ssh遠(yuǎn)程連接主機(jī)并執(zhí)行命令

 更新時(shí)間:2023年07月10日 15:34:58   作者:朱又燉粉條  
這篇文章主要介紹了Java如何通過(guò)ssh遠(yuǎn)程連接主機(jī)并執(zhí)行命令問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java通過(guò)ssh遠(yuǎn)程連接主機(jī)并執(zhí)行命令

需要用到的jar包:

主體代碼: 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class SshLinux {
    private static final Logger log = LoggerFactory.getLogger(SshLinux.class);
    private static String  DEFAULTCHART="UTF-8";
    /**
     * 登錄主機(jī)
     * @return
     *      登錄成功返回true,否則返回false
     */
    public static Connection login(String ip,
                                   String userName,
                                   String userPwd){
        boolean flg=false;
        Connection conn = null;
        try {
            conn = new Connection(ip);
            conn.connect();//連接
            flg=conn.authenticateWithPassword(userName, userPwd);//認(rèn)證
            if(flg){
                log.info("=========登錄成功========="+conn);
                return conn;
            }
        } catch (IOException e) {
            log.error("=========登錄失敗========="+e.getMessage());
            e.printStackTrace();
        }
        return conn;
    }
    /**
     * 遠(yuǎn)程執(zhí)行shll腳本或者命令
     * @param cmd
     *      即將執(zhí)行的命令
     * @return
     *      命令執(zhí)行完后返回的結(jié)果值
     */
    public static String execute(Connection conn,String cmd){
        String result="";
        try {
            if(conn !=null){
                Session session= conn.openSession();//打開一個(gè)會(huì)話
                session.execCommand(cmd);//執(zhí)行命令
                result=processStdout(session.getStdout(),DEFAULTCHART);
                //如果為得到標(biāo)準(zhǔn)輸出為空,說(shuō)明腳本執(zhí)行出錯(cuò)了
                if(StringUtils.isBlank(result)){
                    log.info("得到標(biāo)準(zhǔn)輸出為空,鏈接conn:"+conn+",執(zhí)行的命令:"+cmd);
                    result=processStdout(session.getStderr(),DEFAULTCHART);
                }else{
                    log.info("執(zhí)行命令成功,鏈接conn:"+conn+",執(zhí)行的命令:"+cmd);
                }
                conn.close();
                session.close();
            }
        } catch (IOException e) {
            log.info("執(zhí)行命令失敗,鏈接conn:"+conn+",執(zhí)行的命令:"+cmd+"  "+e.getMessage());
            e.printStackTrace();
        }
        return result;
    }
    /**
     * 解析腳本執(zhí)行返回的結(jié)果集
     * @param in 輸入流對(duì)象
     * @param charset 編碼
     * @return
     *       以純文本的格式返回
     */
    private static String processStdout(InputStream in, String charset){
        InputStream  stdout = new StreamGobbler(in);
        StringBuffer buffer = new StringBuffer();;
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(stdout,charset));
            String line=null;
            while((line=br.readLine()) != null){
                buffer.append(line+"\n");
            }
        } catch (UnsupportedEncodingException e) {
            log.error("解析腳本出錯(cuò):"+e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            log.error("解析腳本出錯(cuò):"+e.getMessage());
            e.printStackTrace();
        }
        return buffer.toString();
    }
}

注意:ganymed這個(gè)jar包,每次只能執(zhí)行一條命令,如果一條命令執(zhí)行了沒(méi)有關(guān)閉,再去執(zhí)行第二條則會(huì)throw new IOException("A remote execution has already started.");

若希望同時(shí)執(zhí)行多條命令,可以在傳入的cmd字符串中用&&連接多條命令。

如:

那么多條命令執(zhí)行的所有結(jié)果將會(huì)一同作為返回的字符串。 

ssh 遠(yuǎn)程腳本執(zhí)行 java: command not found

ssh 遠(yuǎn)程主機(jī)腳本執(zhí)行、執(zhí)行 java -version,報(bào)如題錯(cuò)誤

[root@doris-fe-01 module]# ./install.sh "java -version "
java -version
doris-fe-01 ...
bash: java: command not found
doris-fe-02 ...
bash: java: command not found

### 直接登錄遠(yuǎn)程主機(jī),java -version 正常執(zhí)行
[root@doris-fe-01 module]# ssh doris-fe-02
Last login: Mon Nov 14 16:54:51 2022
[root@doris-fe-02 ~]# java -version
java version "1.8.0_141"
Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)

處理

export JAVA_HOME=/opt/module/jdk1.8.0_141' >>/etc/bashrc
echo 'export PATH=/opt/module/jdk1.8.0_141/bin:$PATH' >>/etc/bashrc
###?
source /etc/bashrc

[root@doris-fe-01 module]# ./install.sh "java -version "
java -version
doris-fe-01 ...
java version "1.8.0_141"
Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)
...

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot動(dòng)態(tài)數(shù)據(jù)源連接測(cè)試的操作詳解

    SpringBoot動(dòng)態(tài)數(shù)據(jù)源連接測(cè)試的操作詳解

    這篇文章主要介紹了SpringBoot動(dòng)態(tài)數(shù)據(jù)源連接測(cè)試的操作步驟,文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • SpringBoot中使用WebSocket的教程分享

    SpringBoot中使用WebSocket的教程分享

    這篇文章主要為大家詳細(xì)介紹了如何在SpringBoot中使用WebSocket,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-06-06
  • Java實(shí)現(xiàn)順序表的增刪查改功能

    Java實(shí)現(xiàn)順序表的增刪查改功能

    這篇文章主要介紹了Java實(shí)現(xiàn)順序表的增刪查改功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Spring中的策略模式簡(jiǎn)單實(shí)現(xiàn)與使用分析

    Spring中的策略模式簡(jiǎn)單實(shí)現(xiàn)與使用分析

    這篇文章主要介紹了Spring中的策略模式簡(jiǎn)單實(shí)現(xiàn)與使用分析,去初始化時(shí)除了?initMultipartResolver(上傳文件)沒(méi)有獲取?Properties?defaultStrategies;默認(rèn)策略,其他的八大件都會(huì)使用到策略模式,需要的朋友可以參考下
    2024-01-01
  • Springcloud GateWay網(wǎng)關(guān)配置過(guò)程圖解

    Springcloud GateWay網(wǎng)關(guān)配置過(guò)程圖解

    這篇文章主要介紹了Springcloud GateWay網(wǎng)關(guān)配置過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java Stream流零基礎(chǔ)教程

    Java Stream流零基礎(chǔ)教程

    Java8的另一大亮點(diǎn)Stream,它與java.io包里的InputStream和OutputStream是完全不同的概念,下面這篇文章主要給大家介紹了關(guān)于Java8中Stream詳細(xì)使用方法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Java并發(fā) 結(jié)合源碼分析AQS原理

    Java并發(fā) 結(jié)合源碼分析AQS原理

    這篇文章主要介紹了Java并發(fā) 結(jié)合源碼分析AQS原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • spring 重復(fù)注解和aop攔截的實(shí)現(xiàn)示例

    spring 重復(fù)注解和aop攔截的實(shí)現(xiàn)示例

    本文主要介紹了spring 重復(fù)注解和aop攔截的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • maven+阿里云創(chuàng)建國(guó)內(nèi)鏡像的中央倉(cāng)庫(kù)(親測(cè)可用)

    maven+阿里云創(chuàng)建國(guó)內(nèi)鏡像的中央倉(cāng)庫(kù)(親測(cè)可用)

    本篇文章主要介紹了maven+阿里云創(chuàng)建國(guó)內(nèi)鏡像的中央倉(cāng)庫(kù)(親測(cè)可用),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 詳解Http協(xié)議以及post與get區(qū)別

    詳解Http協(xié)議以及post與get區(qū)別

    這篇文章主要介紹了詳解Http協(xié)議以及post與get區(qū)別,通過(guò)分別說(shuō)明Http協(xié)議以及get與post各自的概念,再到兩者作比較有著詳細(xì)的說(shuō)明,希望對(duì)你有所幫助
    2021-06-06

最新評(píng)論