Java使用Jsch与sftp服务器实现ssh免密登录

复制代码
本次验证是通过jsch配置rsa私钥路径的思路进行的。详细步骤如下:

1、引用依赖jar

java 复制代码
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.51</version>
</dependency>

2、代码参考:

java 复制代码
//从环境变量或配置文件中读取 目标服务器ip、端口、用户名、私钥路径
String ftpHost = System.getEnv("sftpHost");
String sftpPort= System.getEnv("sftpPort");
String sftpUserName = System.getEnv("sftpUserName");
String sftpPrivatekey= System.getEnv("sftp_privatekey");

//建立JSch对象
JSch jsch = new JSch();
Session session = null;
ChannelSftp channelSftp = null

try{
 //添加私钥
 jsch.addIdentity(sftpPrivatekey);
 session=jsch.getSession(sftpUserName, ftpHost, sftpPort);
 Properties sessionConfig = new Properties();
 //SSH 公钥检查机制 no、ask、yes
 sessionConfig.put("StrictHostKeyChecking", "no");
 session.connect();
 channelSftp = (ChannelSftp) session.openChannel("sftp"); // 打开SFTP通道
 channelSftp.connect();
 //进行操作 如进入指定文件夹
 channelSftp.cd(path);
}catch (JSchException e) {
 logger.error("sftp getConnect error : "+e);
}

3、配置私钥的步骤

1、在linux下执行ssh-keygen -t rsa 生成一对对应公私钥。 输入命令后按三下回车。

2、检查~/用户名/.ssh目录下是否有id_rsa、id_rsa.pub、authorized_keys三个文件。

注意:生成文件的目录建议默认,如果没有authorized_keys文件需要手工新建下,或者直接把id_rsa.pub复制为authorized_keys。检查并设置id_rsa、authorized_keys文件的权限为600。

java 复制代码
cp id_rsa.pub  authorized_keys
chmod 600 id_rsa 
chmod 600 authorized_keys
stat --c "%a %n"  文件夹或文件名

3、root用户检查/etc/ssh/sshd_config下面是否有配置HostKey对应的rsa文件路径,如果存在其他rsa结尾的路径,建议把新生成的id_rsa文件的绝对路径配置到sshd_config中,如果没有可以忽略。

注意:修改sshd_config后需要重启sshd服务。

java 复制代码
sudo systemctl restart sshd

4、把生成的id_rsa文件放到代码中配置的sftp_privatekey路径下一份。

5、免密登录是否配置成功检查

java 复制代码
ssh --i id_rsa绝对路径  sftp用户@sftp地址

感觉各位博主的分享:

<Linux>《OpenSSH 守护进程配置文件sshd_config详解》

Linux免密登录设置(22端口和非默认端口)

详解Java使用Jsch与sftp服务器实现ssh免密登录

linux ssh配置文件和密钥文件

【authorized_keys配置及常见问题】

jsch session(ssh)

相关推荐
嵌入式小能手25 分钟前
飞凌嵌入式ElfBoard-Shell脚本编写基础-特殊变量
linux·运维·服务器
SWAGGY..26 分钟前
【C++初阶】:(15)模板进阶--从非类型参数到模板特化与分离编译
java·服务器·前端
呉師傅34 分钟前
关于惠普LaserJet1018打印机在Windows11上打印颜色偏淡的问题解决方法
运维·服务器·windows·计算机外设·电脑
楠楠子呀1 小时前
独立站聊天转化全链路:从二维码引流到数据复盘
java·javascript·数据仓库·python·c#·自动化·etl
yurenpai(27届找实习中)1 小时前
从零读懂AI智能客服(二):Java 多模块项目如何协作:Maven 依赖、Spring 注入与运行时装配
java·spring·maven
有来技术1 小时前
youlai-boot 实战:MinIO 停止维护,Docker 迁移 RustFS 完整记录
java·后端·docker
吴声子夜歌1 小时前
Java面试——设计模式(二)
java·设计模式·面试
JAVA面经实录9171 小时前
MySQL问题定位与性能优化完整知识体系
java·jvm·数据库·mysql·性能优化
Rain的Java大神之路1 小时前
Docker搭建Redis集群完全指南
java·运维·redis·后端·docker·容器·架构
Raas1001 小时前
大模型网关和API网关区别是什么?MAI Gateway统一AI流量治理
java·大数据·运维·人工智能·gateway·企业级·ai网关