Java訪問SFTP服務(wù)器阵苇,踩了私鑰的坑

背景

Java 程序訪問第三方SFTP服務(wù)器下載文件备禀,第三方只提供賬號+私鑰(key.ppk文件)

引入工具包(jsch)

建議引用最新版本洲拇,一開始版本過低,報錯了

<!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.54</version>
</dependency>

DEMO

package com.ctrip.ibu.yzy.test.ftp;

import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

import java.util.Properties;
import java.util.Vector;

public class FTPTest {
    public static void main(String[] args) {
        JSch jsch = new JSch();
        Session session = null;
        ChannelSftp channel = null;
        String path = FTPTest.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        try {
            jsch.addIdentity(path + "key.ppk");
            session = jsch.getSession("username", "host", 22);
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.setTimeout(20000);
            session.connect();
            channel = (ChannelSftp) session.openChannel("sftp");
            channel.connect();

            Vector vector = channel.ls("/infiles/");
            for (Object obj : vector) {
                if (obj instanceof ChannelSftp.LsEntry) {
                    ChannelSftp.LsEntry entry = (ChannelSftp.LsEntry) obj;
                    System.out.println(entry.getFilename());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            channel.quit();
            session.disconnect();
        }
    }
}

控制臺輸出infiles目錄下所有 文件名

.
..
634_Hotel_report_20190521.csv.gz
634_Hotel_report_20190306.csv.gz
634_Hotel_report_20190412.csv.gz
634_POS_report_20190509.csv.gz
634_POS_report_20190512.csv.gz
634_Hotel_report_20190409.csv.gz

jsch 其他方法可以自行谷歌

踩坑

以上看起來沒有什么問題曲尸,當(dāng)我發(fā)布到測試環(huán)境(linux)的時候赋续,運(yùn)行報異常:

com.jcraft.jsch.JSchException: invalid privatekey: [B@392b0008

網(wǎng)上翻了好多帖子也沒有找到解決方案,猜測是秘鑰問題队腐,果然看到有說mac系統(tǒng)無法使用ppk遠(yuǎn)程登錄的帖子蚕捉。

解決方案

下載Puttygen,將key.ppk 轉(zhuǎn)換成 key.pem

image.png

修改后的代碼柴淘,測試通過

boolean windows = System.getProperty("os.name").toLowerCase().contains("windows");
String path = getClass().getClassLoader().getResource(windows ? "key.ppk" : "key.pem").getPath();
......
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秘通,隨后出現(xiàn)的幾起案子为严,更是在濱河造成了極大的恐慌,老刑警劉巖肺稀,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件第股,死亡現(xiàn)場離奇詭異,居然都是意外死亡话原,警方通過查閱死者的電腦和手機(jī)夕吻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來繁仁,“玉大人涉馅,你說我怎么就攤上這事』剖” “怎么了稚矿?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我晤揣,道長桥爽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任昧识,我火速辦了婚禮钠四,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跪楞。我一直安慰自己形导,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布习霹。 她就那樣靜靜地躺著朵耕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淋叶。 梳的紋絲不亂的頭發(fā)上阎曹,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音煞檩,去河邊找鬼处嫌。 笑死,一個胖子當(dāng)著我的面吹牛斟湃,可吹牛的內(nèi)容都是我干的熏迹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼凝赛,長吁一口氣:“原來是場噩夢啊……” “哼注暗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起墓猎,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤捆昏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后毙沾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骗卜,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年左胞,在試婚紗的時候發(fā)現(xiàn)自己被綠了寇仓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡烤宙,死狀恐怖遍烦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情门烂,我是刑警寧澤乳愉,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布兄淫,位于F島的核電站,受9級特大地震影響蔓姚,放射性物質(zhì)發(fā)生泄漏捕虽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一坡脐、第九天 我趴在偏房一處隱蔽的房頂上張望泄私。 院中可真熱鬧,春花似錦备闲、人聲如沸晌端。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咧纠。三九已至,卻和暖如春泻骤,著一層夾襖步出監(jiān)牢的瞬間漆羔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工狱掂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留演痒,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓趋惨,卻偏偏與公主長得像鸟顺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子器虾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容