欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實現ssh連接服務器的方法步驟

 更新時間:2023年09月08日 09:46:01   作者:Roc-xb  
本文主要介紹了java實現ssh連接服務器的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、引入依賴

<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>

二、工具類

(1)SSHExecutor類

import com.jcraft.jsch.*;
import java.io.*;
import java.util.concurrent.TimeUnit;
import static java.lang.String.format;
public class SSHExecutor {
    private static long INTERVAL = 100L;
    private static int SESSION_TIMEOUT = 30000;
    private static int CHANNEL_TIMEOUT = 3000;
    private JSch jsch = null;
    private Session session = null;
    public SSHExecutor(SSHInfo sshInfo) throws JSchException {
        jsch = new JSch();
        session = jsch.getSession(sshInfo.getUser(), sshInfo.getHost(), sshInfo.getPort());
        session.setPassword(sshInfo.getPassword());
        session.setUserInfo(new MyUserInfo());
        session.connect(SESSION_TIMEOUT);
    }
    /*
    * 注意編碼轉換
    * */
    public long shell(String cmd, String outputFileName) throws JSchException, IOException, InterruptedException {
        long start = System.currentTimeMillis();
        Channel channel = session.openChannel("shell");
        PipedInputStream pipeIn = new PipedInputStream();
        PipedOutputStream pipeOut = new PipedOutputStream(pipeIn);
        FileOutputStream fileOut = new FileOutputStream(outputFileName, true);
        channel.setInputStream(pipeIn);
        channel.setOutputStream(fileOut);
        channel.connect(CHANNEL_TIMEOUT);
        pipeOut.write(cmd.getBytes());
        Thread.sleep(INTERVAL);
        pipeOut.close();
        pipeIn.close();
        fileOut.close();
        channel.disconnect();
        return System.currentTimeMillis() - start;
    }
    public int exec(String cmd) throws IOException, JSchException, InterruptedException {
        ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
        channelExec.setCommand(cmd);
        channelExec.setInputStream(null);
        channelExec.setErrStream(System.err);
        InputStream in = channelExec.getInputStream();
        channelExec.connect();
        int res = -1;
        StringBuffer buf = new StringBuffer(1024);
        byte[] tmp = new byte[1024];
        while (true) {
            while (in.available() > 0) {
                int i = in.read(tmp, 0, 1024);
                if (i < 0) break;
                buf.append(new String(tmp, 0, i));
            }
            if (channelExec.isClosed()) {
                res = channelExec.getExitStatus();
                System.out.println( format("Exit-status: %d", res));
                break;
            }
            TimeUnit.MILLISECONDS.sleep(100);
        }
        System.out.println(buf.toString());
        channelExec.disconnect();
        return res;
    }
    public Session getSession() {
        return session;
    }
    public void close() {
        getSession().disconnect();
    }
    /*
    * SSH連接信息
    * */
    public static class SSHInfo {
        private String user;
        private String password;
        private String host;
        private int port;
        public SSHInfo(String user, String password, String host, int port) {
            this.user = user;
            this.password = password;
            this.host = host;
            this.port = port;
        }
        public String getUser() {
            return user;
        }
        public String getPassword() {
            return password;
        }
        public String getHost() {
            return host;
        }
        public int getPort() {
            return port;
        }
    }
    /*
    * 自定義UserInfo
    * */
    private static class MyUserInfo implements UserInfo {
        @Override
        public String getPassphrase() {
            return null;
        }
        @Override
        public String getPassword() {
            return null;
        }
        @Override
        public boolean promptPassword(String s) {
            return false;
        }
        @Override
        public boolean promptPassphrase(String s) {
            return false;
        }
        @Override
        public boolean promptYesNo(String s) {
            System.out.println(s);
            System.out.println("true");
            return true;
        }
        @Override
        public void showMessage(String s) {
        }
    }
}

(2)SSHUtil類

import com.jcraft.jsch.JSchException;
import java.io.IOException;
public class SSHUtil {
    public static SSHExecutor sshExecutor;
    public static void start (){
        // 此處配置服務器信息
        SSHExecutor.SSHInfo sshInfo = new SSHExecutor.SSHInfo("用戶名", "密碼", "host", "port");
        try {
            sshExecutor = new SSHExecutor(sshInfo);
            System.err.println("ssh災備日志服務器已鏈接");
        } catch (Exception e) {
            System.err.println("ssh災備日志服務器鏈接失敗??!");
            e.printStackTrace();
            sshExecutor.close();
        }
    }
    /**
    * 運行cmd命令
    */
    public static void runCmd (String cmd) throws JSchException, IOException, InterruptedException {
        sshExecutor.exec(cmd);
    }
}

三、使用方法

啟動類中加入

SSHUtil.start();

例如:運行cmd命令

SSHUtil.runCmd("cmd");

到此這篇關于java實現ssh連接服務器的方法步驟的文章就介紹到這了,更多相關java ssh連接服務器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Spring中BeanUtils工具類的使用

    詳解Spring中BeanUtils工具類的使用

    這篇文章主要通過一些示例為大家詳細介紹了Spring中BeanUtils工具類的使用,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-06-06
  • 詳解用maven將dubbo工程打成jar包運行

    詳解用maven將dubbo工程打成jar包運行

    這篇文章主要介紹了詳解用maven將dubbo工程打成jar包運行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Spring中BeanFactoryPostProcessors是如何執(zhí)行的

    Spring中BeanFactoryPostProcessors是如何執(zhí)行的

    BeanFactoryPostProcessor是Spring容器提供的一個擴展機制,它允許開發(fā)者在Bean的實例化和初始化之前對BeanDefinition進行修改和處理,這篇文章主要介紹了你知道Spring中BeanFactoryPostProcessors是如何執(zhí)行的嗎,需要的朋友可以參考下
    2023-11-11
  • Java使用RedisTemplate模糊刪除key操作

    Java使用RedisTemplate模糊刪除key操作

    這篇文章主要介紹了Java使用RedisTemplate模糊刪除key操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Springboot+Thymeleaf+Jpa實現登錄功能(附源碼)

    Springboot+Thymeleaf+Jpa實現登錄功能(附源碼)

    最近有學習到關于Springboot+Thymeleaf+Jpa的綜合運用知識,因此想寫一個簡單的登錄界面來嘗試一下,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • 使用chatgpt實現微信聊天小程序的代碼示例

    使用chatgpt實現微信聊天小程序的代碼示例

    這篇文章主要介紹了使用chatgpt實現微信聊天小程序(秒回復),文中有詳細的代碼示例,對大家了解chatgpt聊天有一定的幫助,感興趣的同學可以參考閱讀
    2023-05-05
  • JDK10新特性之本地變量類型var的深入理解

    JDK10新特性之本地變量類型var的深入理解

    這篇文章主要給大家介紹了J關于DK10新特性之本地變量類型var的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用JDK10具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-05-05
  • Java常量池知識點總結

    Java常量池知識點總結

    本篇文章給大家通過理論原理等方便徹底分析了Java常量池的相關知識,有興趣的朋友閱讀學習下吧。
    2017-12-12
  • Java中jstat命令的使用詳解

    Java中jstat命令的使用詳解

    jstat命令可以查看堆內存各部分的使用量,以及加載類的數量,下面這篇文章主要給大家介紹了關于Java中jstat命令使用的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 詳解Jenkins 實現Gitlab事件自動觸發(fā)Jenkins構建及釘釘消息推送

    詳解Jenkins 實現Gitlab事件自動觸發(fā)Jenkins構建及釘釘消息推送

    這篇文章主要介紹了Jenkins 實現Gitlab事件自動觸發(fā)Jenkins構建及釘釘消息推送,應該會對大家學習Jenkins有所啟發(fā)
    2021-04-04

最新評論