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

如何在java中使用SFTP協(xié)議安全的傳輸文件

 更新時(shí)間:2020年10月12日 08:57:12   作者:字母哥博客  
這篇文章主要介紹了如何在java中使用SFTP協(xié)議安全的傳輸文件,幫助大家更好的理解和使用JSch,感興趣的朋友可以了解下

本文介紹在Java中如何使用基于SSH的文件傳輸協(xié)議(SFTP)將文件從本地上傳到遠(yuǎn)程服務(wù)器,或者將文件在兩個(gè)服務(wù)器之間安全的傳輸。我們先來了解一下這幾個(gè)協(xié)議

  • SSH 是較可靠,專為遠(yuǎn)程登錄會(huì)話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議。比如:我們購買的云服務(wù)器登陸的時(shí)候使用的協(xié)議都是ssh。
  • ftp協(xié)議通常是用來在兩個(gè)服務(wù)器之間傳輸文件的,但是它本質(zhì)上是不安全的。
  • 那么SFTP是什么?SFTP可以理解為SSH + FTP,也就是安全的網(wǎng)絡(luò)文件傳輸協(xié)議。

一般來說,SFTP和FTP服務(wù)都是使用相應(yīng)的客戶端軟件來提供服務(wù)。如果你希望在java代碼中使用SFTP協(xié)議進(jìn)行安全的文件傳輸,那么這篇文章非常適合你。

1. 導(dǎo)入JSch 依賴包

在maven項(xiàng)目pom.xml中導(dǎo)入如下的坐標(biāo),我們使用JSch,JSch將SFTP協(xié)議封裝為對(duì)應(yīng)的API供我們調(diào)用。

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

2. 文件傳輸 – JSch例子

2.1 get與put方法

JSch,我們可以使用putget在服務(wù)器之間進(jìn)行文件傳輸。put方法用來將文件從本地系統(tǒng)傳輸?shù)竭h(yuǎn)程服務(wù)器。

channelSftp.put(localFile, remoteFile);

get方法將文件從遠(yuǎn)程服務(wù)器下載到本地系統(tǒng)。

channelSftp.get(remoteFile, localFile);

2.2 使用用戶名和密碼進(jìn)行認(rèn)證

JSch jsch = new JSch();
jsch.setKnownHosts("/home/zimug/.ssh/known_hosts");
jschSession = jsch.getSession(USERNAME, REMOTE_HOST, REMOTE_PORT);

jschSession.setPassword(PASSWORD);
  • "/home/zimug/.ssh/known_hosts"為SSH的known_hosts文件,也就是可信遠(yuǎn)程主機(jī)的公鑰保存文件。
  • USERNAME 為用戶名
  • REMOTE_HOST遠(yuǎn)程主機(jī)的Ip
  • REMOTE_PORT遠(yuǎn)程主機(jī)端口
  • PASSWORD遠(yuǎn)程主機(jī)登錄密碼

2.3.使用公鑰和私鑰進(jìn)行認(rèn)證

如果讀者不能理解公鑰和私鑰的用法及含義,需要先自行補(bǔ)充一下SSH知識(shí)。

  • 本地私鑰–/home/登錄用戶名/.ssh/id_rsa
  • 遠(yuǎn)程公鑰默認(rèn)保存位置–~/.ssh/authorized_keys
JSch jsch = new JSch();
jsch.setKnownHosts("/home/zimug/.ssh/known_hosts");
jschSession = jsch.getSession(USERNAME, REMOTE_HOST, REMOTE_PORT);

jsch.addIdentity("/home/zimug/.ssh/id_rsa");

2.4 完整JSch文件傳輸示例

將文件從本地系統(tǒng)傳輸?shù)竭h(yuǎn)程服務(wù)器1.2.3.4,并使用SSH密碼登陸方式進(jìn)行身份驗(yàn)證。

import com.jcraft.jsch.*;

public class SFTPFileTransfer {

  private static final String REMOTE_HOST = "1.2.3.4"; //遠(yuǎn)程主機(jī)ip
  private static final String USERNAME = ""; //登錄用戶名
  private static final String PASSWORD = ""; //登陸密碼
  private static final int REMOTE_PORT = 22;  //ssh協(xié)議默認(rèn)端口
  private static final int SESSION_TIMEOUT = 10000; //session超時(shí)時(shí)間
  private static final int CHANNEL_TIMEOUT = 5000; //管道流超時(shí)時(shí)間

  public static void main(String[] args) {

    String localFile = "/home/zimug/local/random.txt";  //本地文件路徑
    String remoteFile = "/home/zimug/remote/targetfile.txt";  //上傳到遠(yuǎn)程的文件路徑,要保證登錄用戶有寫權(quán)限

    Session jschSession = null;

    try {

      JSch jsch = new JSch();
      jsch.setKnownHosts("/home/zimug/.ssh/known_hosts");
      jschSession = jsch.getSession(USERNAME, REMOTE_HOST, REMOTE_PORT);

      // 通過ssh私鑰的方式登錄認(rèn)證
      // jsch.addIdentity("/home/zimug/.ssh/id_rsa");

      // 通過密碼的方式登錄認(rèn)證
      jschSession.setPassword(PASSWORD);
      jschSession.connect(SESSION_TIMEOUT);

      Channel sftp = jschSession.openChannel("sftp"); //建立sftp文件傳輸管道
      sftp.connect(CHANNEL_TIMEOUT);

      ChannelSftp channelSftp = (ChannelSftp) sftp;

      // 傳輸本地文件到遠(yuǎn)程主機(jī)
      channelSftp.put(localFile, remoteFile);

      channelSftp.exit();

    } catch (JSchException | SftpException e) {
      e.printStackTrace();
    } finally {
      if (jschSession != null) {
        jschSession.disconnect();
      }
    }
    System.out.println("文件傳輸完成!");
  }
}

3. JSch異常處理

在文件上傳的過程中,我們可能會(huì)遇到下面的一些異常

3.1UnknownHostKey異常

需要將遠(yuǎn)程服務(wù)器IP地址添加到known_hosts文件中。

$ ssh-keyscan -t rsa 1.2.3.4 >> ~/.ssh/known_hosts

3.2對(duì)于私鑰無效異常

有可能是遠(yuǎn)程服務(wù)器重新生成了私鑰,需要把私鑰分發(fā)復(fù)制到本地服務(wù)器。

ssh-copy-id -i ~/.ssh/id_rsa.pub <被分發(fā)的服務(wù)器ip>

3.3對(duì)于Auth fail異常

請(qǐng)確保提供的登錄密碼時(shí)正確的

com.jcraft.jsch.JSchException: Auth fail
	at com.jcraft.jsch.Session.connect(Session.java:519)
	at com.zimug.io.howto.SFTPFileTransfer.main(SFTPFileTransfer.java:34)

作者:字母哥博客

以上就是如何在java中使用SFTP協(xié)議安全的傳輸文件的詳細(xì)內(nèi)容,更多關(guān)于Java 傳輸文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot集成Liquibase的詳細(xì)步驟

    SpringBoot集成Liquibase的詳細(xì)步驟

    Liquibase 是一個(gè)強(qiáng)大的數(shù)據(jù)庫版本控制工具,能夠與 Spring Boot
    無縫集成,以簡(jiǎn)化數(shù)據(jù)庫遷移和管理的過程,以下是從開始集成到最終運(yùn)行的詳細(xì)步驟,需要的朋友可以參考下
    2024-12-12
  • Java 中解決Unsupported major.minor version 51.0的問題

    Java 中解決Unsupported major.minor version 51.0的問題

    本文主要介紹解決Unsupported major.minor version 51.0的問題, 這里給大家整理了詳細(xì)資料,有需要的小伙伴可以參考下
    2016-08-08
  • SpringBoot返回對(duì)象時(shí),如何將Long類型轉(zhuǎn)換為String

    SpringBoot返回對(duì)象時(shí),如何將Long類型轉(zhuǎn)換為String

    這篇文章主要介紹了SpringBoot返回對(duì)象時(shí),實(shí)現(xiàn)將Long類型轉(zhuǎn)換為String,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 微信APP支付(IOS手機(jī)端+java后臺(tái))版

    微信APP支付(IOS手機(jī)端+java后臺(tái))版

    這篇文章主要為大家詳細(xì)介紹了微信APP支付(IOS手機(jī)端+java后臺(tái))版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Java中Range函數(shù)的簡(jiǎn)單介紹

    Java中Range函數(shù)的簡(jiǎn)單介紹

    這篇文章主要介紹了Java中Range函數(shù)的簡(jiǎn)單介紹,Java中的range方法用于返回IntStream和LongStream在函數(shù)參數(shù)范圍內(nèi)的順序值
    2022-07-07
  • Java 導(dǎo)出excel進(jìn)行換行的案例

    Java 導(dǎo)出excel進(jìn)行換行的案例

    這篇文章主要介紹了Java 導(dǎo)出excel進(jìn)行換行的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Spring事務(wù)隔離級(jí)別簡(jiǎn)介及實(shí)例解析

    Spring事務(wù)隔離級(jí)別簡(jiǎn)介及實(shí)例解析

    這篇文章主要介紹了Spring事務(wù)隔離級(jí)別簡(jiǎn)介及實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 詳解spring自動(dòng)掃描包

    詳解spring自動(dòng)掃描包

    這篇文章主要介紹了spring自動(dòng)掃描包的相關(guān)知識(shí),本文通過實(shí)例相結(jié)合的形式給大家介紹的非常詳細(xì),感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-06-06
  • Spring Data JPA 簡(jiǎn)單查詢--方法定義規(guī)則(詳解)

    Spring Data JPA 簡(jiǎn)單查詢--方法定義規(guī)則(詳解)

    下面小編就為大家?guī)硪黄猄pring Data JPA 簡(jiǎn)單查詢--方法定義規(guī)則(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • JavaWeb亂碼問題的終極解決方案(推薦)

    JavaWeb亂碼問題的終極解決方案(推薦)

    這篇文章主要給大家介紹了關(guān)于JavaWeb亂碼問題的終極解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JavaWeb具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論

新兴县| 呼伦贝尔市| 来安县| 双鸭山市| 盐亭县| 长岛县| 于都县| 岗巴县| 枣强县| 汉川市| 府谷县| 林甸县| 峡江县| 濉溪县| 汉沽区| 连城县| 凤庆县| 和政县| 嘉定区| 内丘县| 黑河市| 延庆县| 永登县| 军事| 清水河县| 兴义市| 龙南县| 禄丰县| 正阳县| 高要市| 新津县| 宝坻区| 饶平县| 荆州市| 桑植县| 当涂县| 亚东县| 台北市| 双桥区| 中阳县| 阜康市|