最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java通過ssh連接執(zhí)行shell命令,文件傳輸方式

 更新時間:2023年08月25日 10:17:20   作者:kaili230  
這篇文章主要介紹了java通過ssh連接執(zhí)行shell命令,文件傳輸方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

java通過ssh連接執(zhí)行shell命令,文件傳輸

JSch 是SSH2的純 Java 實現(xiàn) 。

JSch 允許您連接到 sshd 服務(wù)器并使用端口轉(zhuǎn)發(fā)、X11 轉(zhuǎn)發(fā)、文件傳輸?shù)?,可以將其功能集成到您自己?Java 程序中。

JSch 是在BSD 風格許可下獲得許可的。

JSCH 官網(wǎng):http://www.jcraft.com/jsch/

在這里插入圖片描述

zip文件中有很多demo.

jar為依賴jar

maven 依賴

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

測試代碼

import com.jcraft.jsch.*;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.io.*;
import java.util.Properties;
@Slf4j
public class SshTest {
    private String charset = "UTF-8"; // 設(shè)置編碼格式
    private static String userName = "kevin"; // 用戶名
    private static String passWord= "1"; // 登錄密碼
    private static String host = "192.168.10.101"; // 主機IP
    private static int port = 22; //默認端口
    private static JSch jsch;
    private static Session session;
    private static ChannelSftp channelSftp;
    @BeforeAll
    public static void createConn() throws JSchException {
		JSch.setLogger(new Log4JSch()); // detail log for JSch.
        jsch = new JSch();
//        jsch = new KeyGen().keyGenTest();
        // 密鑰方式
        jsch.setKnownHosts("C:\\Users\\Admin\\.ssh\\known_hosts");
//        jsch.addIdentity("~/.ssh/id_rsa", "~/.ssh/id_rsa.pub", null);
//        jsch.addIdentity("C:\\Users\\Admin\\.ssh\\id_rsa", "C:\\Users\\Admin\\.ssh\\id_rsa.pub", null);
        String privKeyPath = "C:\\Users\\Admin\\.ssh\\id_rsa";
        jsch.addIdentity(privKeyPath);
        session = jsch.getSession(userName, host, port);
        // 密碼方式
//        session.setPassword(passWord);
        Properties config = new Properties();
        /*
         * 在代碼里需要跳過檢測。否則會報錯找不到主機
         * Test ignored.
         * com.jcraft.jsch.JSchException: UnknownHostKey: 192.168.10.101. RSA key fingerprint is 10:92:98:45:d2:ea:6b:8f:c1:43:e5:df:86:e5:ae:3c
         */
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config); // 為Session對象設(shè)置properties
        int timeout = 30000;
        session.setTimeout(timeout); // 設(shè)置timeout時間
        session.connect(); // 通過Session建立與遠程服務(wù)器的連接回話
        log.info("connect server host: " + host);
    }
    /**
     * 關(guān)閉連接
     */
    @AfterAll
    public static void disconnect(){
        log.info("disconnect...");
        if (channelSftp != null && channelSftp.isConnected()) {
            channelSftp.disconnect();
        }
        if(session != null && session.isConnected()){
            session.disconnect();
        }
    }
    @Test
    public void downloadFile() throws JSchException, FileNotFoundException, SftpException {
        channelSftp = (ChannelSftp) session.openChannel("sftp");
        channelSftp.connect();
        log.info("start download channel file!");
        String directory = "/tmp";
        channelSftp.cd(directory);
        String saveDir = "D:\\desktop\\"+System.currentTimeMillis()+".txt";
        File file = new File(saveDir);
        String downloadFile = "Test.java";
        channelSftp.get(downloadFile, new FileOutputStream(file));
        log.info("Download Success!");
        channelSftp.disconnect();
        log.info("end execute channel sftp!");
    }
    @Test
    public void uploadFile() throws JSchException, SftpException, FileNotFoundException {
        channelSftp = (ChannelSftp) session.openChannel("sftp");
        channelSftp.connect();
        log.info("start upload channel file!");
        String directory = "/tmp";
        channelSftp.cd(directory);
        File file = new File("D:\\desktop\\Test.java");
        channelSftp.put(new FileInputStream(file), file.getName().replace(".", System.currentTimeMillis()+"."));
        log.info("Upload Success!");
        channelSftp.disconnect();
        log.info("end execute channel sftp!");
    }
    @Test
    public void execShell() throws JSchException, IOException {
        ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
        String cmd = "pwd";
        channelExec.setCommand(cmd);         //添加傳入進來的shell命令
        channelExec.setErrStream(System.err);//通道連接錯誤信息提示
        channelExec.connect();
        log.info("start execute channel command!");
        try(BufferedReader in = new BufferedReader(new InputStreamReader(channelExec.getInputStream()))) {
            String msg;
            log.info("start read!");
            while ((msg = in.readLine()) != null) {
                log.info("命令返回信息:{}", msg);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        channelExec.disconnect();
        log.info("end execute channel command!");
    }
}

JSch 詳細日志實現(xiàn)。

JSch.setLogger(new Log4JSch());
import com.jcraft.jsch.Logger;
import java.util.HashMap;
public class Log4JSch implements Logger {
    private static HashMap<String, String> name = new HashMap();
    static {
        name.put(String.valueOf(DEBUG), "DEBUG");
        name.put(String.valueOf(INFO), "INFO");
        name.put(String.valueOf(WARN), "WARN");
        name.put(String.valueOf(ERROR), "ERROR");
        name.put(String.valueOf(FATAL), "FATAL");
    }
    @Override
    public boolean isEnabled(int i) {
        return true;
    }
    @Override
    public void log(int level, String message) {
        System.err.println(name.get(String.valueOf(level)) + ": " + message);
    }
}

問題1

com.jcraft.jsch.JSchException: invalid privatekey: [B@17f7cd29

查看id_rsa文件,內(nèi)容如下

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC...
...
...
...MAECAwQF
-----END OPENSSH PRIVATE KEY-----

解決方案

Jsch好像不支持上面的私鑰格式,要解決這個問題,我們可以使用ssh-keygen將私鑰格式轉(zhuǎn)換為RSAorpem模式,再次運行上面的程序。

$ ssh-keygen -p -f ~/.ssh/id_rsa -m pem

重新檢查私鑰內(nèi)容,它應(yīng)該以BEGIN RSA.

-----BEGIN RSA PRIVATE KEY-----
MIIG4wIBAAK...
...
...
...E428GBDI4
-----END RSA PRIVATE KEY-----

再次嘗試連接正常。

Admin@DESKTOP-91JEC09 MINGW64 ~
$ ssh kevin@hadoop101
Last login: Wed Oct 20 14:28:41 2021 from 192.168.10.1
[kevin@hadoop101 ~]$ client_loop: send disconnect: Connection reset by peer
Admin@DESKTOP-91JEC09 MINGW64 ~
$ ssh-keygen -p -f C:\\Users\\Admin\\.ssh\\id_rsa -m pem
Key has comment 'Admin@DESKTOP-91JEC09'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
Admin@DESKTOP-91JEC09 MINGW64 ~
$ ssh kevin@hadoop101
Last login: Wed Oct 20 15:43:57 2021 from 192.168.10.1

參考文檔:https://mkyong.com/java/jsch-invalid-privatekey-exception/http://www.jcraft.com/jsch/

總結(jié)

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

相關(guān)文章

  • Java中常見對象映射工具的使用詳解

    Java中常見對象映射工具的使用詳解

    對象映射是 Java 開發(fā)中的重要環(huán)節(jié),尤其在處理數(shù)據(jù)轉(zhuǎn)換時,就需要將一種結(jié)構(gòu)的數(shù)據(jù)轉(zhuǎn)換為另一種結(jié)構(gòu)的數(shù)據(jù)(例如 DTO 和 Entity 之間),在這篇博客中,我們將認識并解析幾種常用的對象映射工具,并提供詳細樣例,需要的朋友可以參考下
    2025-03-03
  • 開發(fā)10年,全記在這本Java進階寶典里了

    開發(fā)10年,全記在這本Java進階寶典里了

    這篇文章主要給大家分享介紹了這本Java進階寶典里,是開發(fā)10年總結(jié)出來的,文中通過圖文介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧
    2019-04-04
  • Java異常架構(gòu)Exception(異常)詳解

    Java異常架構(gòu)Exception(異常)詳解

    這篇文章主要介紹了Java異常架構(gòu)Exception(異常),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java 實現(xiàn)線程池任務(wù)編排的示例代碼

    Java 實現(xiàn)線程池任務(wù)編排的示例代碼

    任務(wù)編排是將多個任務(wù)按照特定的依賴關(guān)系和執(zhí)行順序進行組織和管理的過程,以確保任務(wù)能按預(yù)定邏輯順序高效執(zhí)行,本文就來介紹一下Java 實現(xiàn)線程池任務(wù)編排的示例代碼,感興趣的可以了解一下
    2024-10-10
  • 重啟Jenkins的三種方式及注意事項

    重啟Jenkins的三種方式及注意事項

    Jenkins是一款廣泛使用的持續(xù)集成工具,它允許開發(fā)者自動化構(gòu)建、測試和部署軟件,這篇文章主要介紹了重啟Jenkins的三種方式及注意事項,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • JAVA數(shù)字千分位和小數(shù)點的現(xiàn)實代碼(處理金額問題)

    JAVA數(shù)字千分位和小數(shù)點的現(xiàn)實代碼(處理金額問題)

    這篇文章主要介紹了JAVA數(shù)字千分位和小數(shù)點的現(xiàn)實代碼(處理金額問題),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java編程中的HashSet和BitSet詳解

    Java編程中的HashSet和BitSet詳解

    這篇文章主要介紹了Java編程中的HashSet和BitSet詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 解決java調(diào)用python代碼返回值中文亂碼問題

    解決java調(diào)用python代碼返回值中文亂碼問題

    這篇文章主要介紹了解決java調(diào)用python代碼返回值中文亂碼問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Value注解支持對象類型ConfigurationProperties功能

    Value注解支持對象類型ConfigurationProperties功能

    這篇文章主要為大家介紹了Value注解支持對象類型ConfigurationProperties功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Java的最大棧深度與JVM核心知識介紹

    Java的最大棧深度與JVM核心知識介紹

    這篇文章主要有兩個部分,一部分介紹JAVA的最大棧深度,第二部分介紹了JVM核心知識,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09

最新評論

滨州市| 云和县| 海兴县| 德化县| 沅陵县| 亚东县| 英德市| 南乐县| 普陀区| 安泽县| 会泽县| 崇左市| 柏乡县| 剑阁县| 土默特左旗| 高安市| 南江县| 无锡市| 黄平县| 汝州市| 禹城市| 天长市| 旬邑县| 满洲里市| 镇巴县| 景东| 手游| 新河县| 德安县| 商河县| 迁西县| 墨竹工卡县| 鹤岗市| 霍林郭勒市| 岑溪市| 台北县| 绵竹市| 海盐县| 兰考县| 海城市| 邢台县|