需求: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 /