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

时间: 2024-08-21 11:45:25

JSCH通过密钥文件进行远程访问的相关文章

linus jsch上传文件

package com.osplat.util; import java.io.*; import com.jcraft.jsch.*;import com.osplat.bean.Resultmodel;import org.springframework.web.multipart.MultipartFile; /** * @Company:wftdlx * @Author: wjf * @Description: linus 文件上传 * @Date: Created in 10:33 2

无法导入以下密钥文件: xxxx.pfx,该密钥文件可能受密码保护 的解决方案

无法导入以下密钥文件: xxxx.pfx,该密钥文件可能受密码保护.若要更正此问题,请尝试再次导入证书,或手动将证书安装到具有以下密钥容器名称的强名称 CSP: VS_KEY_A5A29909FF6D902D 要解决此问题: 1.打开Visual Studio 命令提示(2010): 开始->Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio 命令提示(2010) 2.用cd命令定位到当前密钥文件xxxx.pf

解决Visual Studio 2010 “无法导入以下密钥文件” 错误

错误原文: "错误 1 无法导入以下密钥文件: SamplePlugin.pfx.该密钥文件可能受密码保护.若要更正此问题,请尝试再次导入证书,或手动将证书安装到具有以下密钥容器名称的强名称 CSP: VS_KEY_AB11B965483B8730SamplePlugin" 要解决此问题: 打开Visual Studio 命令提示(2010): 开始->Microsoft Visual Studio 2010->Visual Studio Tools->Visual

ADMT3.2域迁移之Server2003至Server2012系列(八)生成密钥文件及安装密码迁移工具

在win2008服务器以管理员权限运行CMD并输入 [admt key /option:create /sourcedomain:ma.com /keyfile:C:\admt3.2 /keypassword:123] 将密钥文件拷贝到源服务器上,并在目标服务器上安装pwdmigX86程序 接受许可 添加[加密文件] 输入密钥文件 密码 准备安装 输入运行账号密码 以授予administrator权利 安装完成 安装完成后提示重启操作系统 在源服务器上(win2003)[启动密钥导出服务] 至此

rsync 密钥文件错误问题总结

rsync 可以使用 --password-file 选项指定密钥文件,密钥文件中简单存放 rsync 密码:在第一次使用密钥文件的时候经常遇到文件权限相关问题:这里总结一下,我遇到的问题. 问题描述 在开发环境下,手动执行 python ccmcx_tdw_data_sync.py,执行前还确保了 rsync.secret 具体读写权限,chmod u+rw rsync.secret,执行正常:后面将脚本加入 crontab, 运行报错:password file must be owned

全面解决.Net与Java互通时的RSA加解密问题,使用PEM格式的密钥文件

一.缘由 RSA是一种常用的非对称加密算法.所以有时需要在不用编程语言中分别使用RSA的加密.解密.例如用Java做后台服务端,用C#开发桌面的客户端软件时.由于 .Net.Java 的RSA类库存在很多细节区别,尤其是它们支持的密钥格式不同.导致容易出现“我加密的数据对方不能解密,对方加密的数据我不能解密,但是自身是可以正常加密解密”等情况.虽然网上已经有很多文章讨论 .Net与Java互通的RSA加解密,但是存在不够全面.需要第三方dll.方案复杂 等问题.于是我仔细研究了这一课题,得到了一

ssh -i 密钥文件无法登陆问题

一.用ssh 带密钥文件登录时候,发生以下报错 [[email protected] ~]# ssh -i hz-keypair-demo.pem [email protected]The authenticity of host '172.16.17.104 (172.16.17.104)' can't be established.ECDSA key fingerprint is SHA256:HXYEa2IVBhTJ1AO+GDvROEvHM5ZRLgKxXsSaFmc6CNc.ECDSA

使用keytool生成ssl密钥文件keystore和truststore

最近在研究Mina的开发,通信的时候需要数据加密,而且mina本身支持SSLFilter过滤器,所以可以采用SSL加密的方式对数据进行加密. 在进行加密之前,我们需要使用keytool(这个存在于C:\Program Files\Java\jdk1.7.0_65\bin目录下)产生创建keystore和truststore文件.接下来我会为你介绍生成密钥的方法. 1.打开cmd命令提示符(一定要以管理员身份运行,否则会出现keytool 错误:java.io.FileNotFoundExcept

使用JSch实现SFTP文件传输

1.JSch开发包下载 http://www.jcraft.com/jsch/ 目前最新版本为:jsch-0.1.51 2.简单例子,列出指定目录下的文件列表 import java.util.Properties; import java.util.Vector; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; public class Demo00