JSCH通過密鑰檔案進行遠端存取

來源:互聯網
上載者:User

標籤:

需求:WEB app 需要使用JSCH來通過密鑰檔案的方式進行SFTP/SSH訪問遠程LINUX機器

實現方式:假設遠程機器都含有使用者名稱為hadoop的使用者,因為密碼因為策略的要求密碼會隨時間發生變化,所以希望使用密鑰的方式進行訪問機器,這樣不會因為密碼的變化而無法訪問遠程機器。

基本原理:SSH訪問,被訪問的機器首先需要啟動SSHD服務,然後通過SSH-KEYGEN 預設產生RSA的公私金鑰組。

而且需要配置無密碼訪問,即需要把原生公開金鑰檔案放置到.ssh下的authorized_keys檔案,而且還要保證檔案許可權是600.注意,這裡預設讓產生密鑰時需要的PASSPHASE保持一致,可以保持為空白

,這樣方便在代碼裡使用。
在JSCH程式碼片段裡,通過傳遞 使用者名稱,IP,PASSPHASE,儲存私密金鑰的檔案即要建立串連。

同一個機器上同一個使用者,使用相同的PASSPHASE也會產生不同的私密金鑰檔案,所以需要儲存多份私密金鑰檔案。

調用時的程式碼範例如下:

        String hostIp = "192.168.1.175";        Session session = SSHExecUtil.getInstance().getSession2(hostIp, "hadoop","D:/code/learningJava/src/main/resources/hadoop_rsa");        ChannelExec channelExec = (ChannelExec)  SSHExecUtil.getInstance().getChannelExec(session);        String command = "ls -a /";        String result = SSHExecUtil.getInstance().execCommand(channelExec, command);                System.out.println(result);

 

產生session部分的代碼如下:

        JSch jsch = new JSch();        jsch.addIdentity(filePath,"");        Session session=jsch.getSession(userName, hostIp, 22);        UserInfo ui=new CustomUserInfo();        session.setUserInfo(ui);        Properties config = new Properties();        config.put("StrictHostKeyChecking", "no");        session.setConfig(config);        session.connect();

需要寫一段SHELL指令碼去完成自動設定無密碼訪問本地的功能,另外一種實現思路是,所有機器使用相同的一份公私密金鑰檔案。即把.ssh下面的內容只在某一台機器上產生一份,然後打包分發到其他機器上即可。

JSCH通過密鑰檔案進行遠端存取

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.