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

最新文章

  1. Django底层剖析之一次请求到响应的整个流程
  2. 参考__CSS参考
  3. Android Intent的几种用法全面总结
  4. Effective C++ -----条款44:将与参数无关的代码抽离templates
  5. window 环境安装MongoDB
  6. loj 1037(状压dp)
  7. Java 第五章 循环结构1
  8. JavaScript 事件——“事件类型”中“复合事件”和“变动事件”的注意要点(转)
  9. Java-人民币转成大写
  10. 关于Java(介绍)
  11. u盘安装linux(windows7+linux双系统)
  12. STS(Spring Tool Suite)建立默认的spring mvc项目
  13. GMM的EM算法
  14. 爬虫、请求库requests
  15. java泛型总结(类型擦除、伪泛型、陷阱)
  16. LOJ#2722 情报中心
  17. python多线程中锁的概念
  18. angular笔记_4(函数)
  19. Python while 循环
  20. 由于没有公钥,无法验证下列签名: NO_PUBKEY 54422A4B98AB5139

热门文章

  1. Windows Server配置Jenkins,实现监测SVN提交自动构建.net4.5的项目
  2. httpHandlers与Http处理程序
  3. 减少生成的dll数量
  4. C# DataGridView中指定的单元格不能编辑
  5. MVC 自定义Htmlhelper扩展
  6. Bootstrap之表单控件状态
  7. bzoj 1179[Apio2009]Atm (tarjan+spfa)
  8. 我与ADO.NET二三事(2)
  9. form表单提交和ajax表单提交,关于移动端如何通过软键盘上的【搜索】和【前进】进行提交操作
  10. 一次部署HTTPS的相关事件引发的思考