JSCH通過密鑰文件進行遠程訪問


需求: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下面的內容只在某一台機器上生成一份,然后打包分發到其他機器上即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM