JSCH连接SSH报错:Invalid privatekey

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: JSCH连接SSH报错:Invalid privatekey

JSCH连接SSH报错:Invalid privatekey

环境版本号

  • jsch: jsch-0.1.54.jar
  • SSH: OpenSSH_8.0p1, OpenSSL 1.0.2r 26 Feb 2019
  • jdk: 1.8

报错截图

报错分析

从堆栈来看,在load过程就已经报错,还没有去连接,所以在服务端使用service sshd status命令也不会有本次连接报错的原因。通过debug可以看到,它去加载了密钥文件,然后解析出错。

那么应该是SSH版本太高,工具产生的密钥格式不同了,导致解析失败,来看看密钥。首先是yum update可以更新到的最新的SSH 7.4:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,749E5AFD6F06C22EF6FD3AECCB6E540B
FwOlFOtCM+JH3EG7gzDOffkwLysiDCucdUeDZaK08rFSWzKpMwfPD/AZKNi0dqZR
省略若干行
dAzGWpRtuUIlIB97oXloovzwyMZGXWRy6yhLWJlpSYKSADXoEIQ8NuN+e33UEzeq
-----END RSA PRIVATE KEY-----

然后是不知道哪个瓜儿手动升级到的8.0 p1:

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDRomEs9d
省略若干行
J4vulabMBLFB9BjQYkOPXLShKpTnynFPMoLAdDG8h4Tf9XTBUStp1yXDUryveabJEgnRIW
/g==
-----END OPENSSH PRIVATE KEY-----

密钥中间的值具体什么套路还不懂,但是看首行已经看得出,一个是RSA,一个是OPENSSH的密钥了,那么解析不了就很正常了。

PS: 在此首先痛批网上说版本不兼容,让去升级jsch 0.1.55的,升级完也不好使。其次痛批不能解决的。

解决方法

修改密钥格式,让他变成RSA即可。

一种是像其他博客里说的,用工具进行修改。

一种是用低版本的的SSH工具生成密钥对,上传上去。【恰好,客户的环境就是没有低版本的~】

一种是生成密钥时指定格式,ssh-keygen -m PEM -t rsa,加上参数-m PEM,生成的密钥对,就是RSA的了。【荐】

预装环境

如果你也是遇上了客户环境如此“先进”,而我们本地版本没有那么高的情况,无法复现,就需要升级SSH版本(包括ssl,省的他啰嗦),这里推荐这个博客 https://www.cnblogs.com/nmap/p/10779658.html 。我按照他的升级的,没出啥问题。

参数配置

升级环境后可能遇上ssh登录不上的问题,主要是通过service sshd status查看报错信息。

那么我做过调整的参数主要有这些:

# 允许ROOT登录
PermitRootLogin yes
# 使用DNS,这个影响不大,好像改成yes可以加快连接
# UseDNS no
# 允许hundsun用户登录
AllowUsers hundsun
# 这个参数好像在ssh 8.0中已经废弃,不过加上也没事
RSAAuthentication yes
# 公钥认证开启
PubkeyAuthentication yes
# PAM认证,具体不懂,有人开启YES登录不了,有人不开登录不了
UsePAM yes
# 允许空密码,这个随意
PermitEmptyPasswords yes


目录
相关文章
|
1月前
|
Java 数据库连接 网络安全
JDBC常用特性-SSH隧道连接
JDBC常用特性-SSH隧道连接
|
5月前
|
Ubuntu Shell 网络安全
安装了ubuntu虚拟机后发现shell无法连接 ubuntu开启ssh连接
【8月更文挑战第23天】安装了ubuntu虚拟机后发现shell无法连接
429 6
|
1月前
|
网络协议 Ubuntu Linux
解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)
解决 `ssh: connect to host IP port 22: Connection timed out` 报错涉及检查 SSH 服务状态、防火墙配置、网络连通性和主机名解析等多个方面。通过逐步排查上述问题,并在 `scp` 命令中正确指定端口,可以有效解决连接超时的问题,确保文件传输的顺利进行。希望本文提供的解决方案能帮助您快速定位并解决该错误。
215 3
|
1月前
|
运维 网络安全
解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)
通过这些步骤和方法,您可以有效解决“ssh: connect to host IP port 22: Connection timed out”问题,并顺利使用 `scp`命令传输文件。
752 7
|
2月前
|
网络安全 数据库
gbase 8a 数据库 安装8ampp 常见ssh报错问题
gbase 8a 数据库 安装8ampp 常见ssh报错问题
|
3月前
|
网络安全 数据安全/隐私保护 C++
VS Code 的SSH连接不成功问题分析与解决
VS Code 的SSH连接不成功问题分析与解决
|
5月前
|
安全 Linux 网络安全
Docker部署ssh连接工具webssh2
【8月更文挑战第2天】Docker部署ssh连接工具webssh2
384 6
Docker部署ssh连接工具webssh2
|
5月前
|
网络安全
mac下通过ssh脚本实现免账号密码连接运服务器
mac下通过ssh脚本实现免账号密码连接运服务器
63 3
|
5月前
|
监控 网络安全 数据安全/隐私保护
Mac服务器ssh连接工具
Mac服务器ssh连接工具
161 2
|
5月前
|
存储 安全 算法
如何使用 PuTTY 创建 SSH 密钥以连接到 VPS
如何使用 PuTTY 创建 SSH 密钥以连接到 VPS
134 2