码迷,mamicode.com
首页 > Web开发 > 详细

JSCH通过密钥文件进行远程访问

时间:2016-10-08 16:48:49      阅读:512      评论:0      收藏:0      [点我收藏+]

标签:

需求: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通过密钥文件进行远程访问

标签:

原文地址:http://www.cnblogs.com/huaxiaoyao/p/5938985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!