通过创建rsa格式的私钥以及服务端启用rsa认证解决jsch连接ssh失败的问题
· 3 min read
服务建立ssh
连接失败, 问题定位为jsch
不支持openssh
格式的私钥.
在OpenSSH 7.8
及之后的版本, ssh-keygen
命令默认生成的私钥格式为openssh
.
该格式的头部为-----BEGIN OPENSSH PRIVATE KEY-----
.
在将私钥转换为rsa
格式后, 发现服务端还需要启用rsa
认证, 在启用rsa
认证后问题解决.
下面将详细介绍如何生成rsa
格式的私钥以及服务端启用rsa
认证.
生成rsa格式的私钥
服务建立ssh
链接失败, 日志如下
Caused by: com.jcraft.jsch.JSchException: invalid privatekey: [B@e4487af
at com.jcraft.jsch.KeyPair.load(KeyPair.java:664)
at com.jcraft.jsch.KeyPair.load(KeyPair.java:561)
at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:40)
at com.jcraft.jsch.JSch.addIdentity(JSch.java:407)
at com.jcraft.jsch.JSch.addIdentity(JSch.java:367)
在查阅了相关问题后, 发现jsch
不支持openssh
格式的私钥, 需要将私钥转换为rsa
格式.
通过以下命令生成rsa
格式的私钥
ssh-keygen -t rsa -b 4096 -m PEM
后续会提示输入私钥的文件名, 以及私钥的密码, 一般直接回车即可.
服务端启用rsa认证
note
OpenSSH 8.8
及之后的版本默认禁用rsa认证, 需要手动启用, 可以通过ssh -V
查看sshd
版本
在生成了rsa
格式的私钥后, 通过ssh
连接服务端, 发现连接失败, 查看sshd
日志发现如下错误
journalctl -t sshd -f
该命令输出如下内容
May 05 18:05:00 orange sshd[289365]: userauth_pubkey: signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
May 05 18:05:00 orange sshd[289365]: error: Received disconnect from 127.0.0.1 port 55904:3: com.jcraft.jsch.JSchException: Auth fail [preauth]
May 05 18:05:00 orange sshd[289365]: Disconnected from authenticating user fastone 127.0.0.1 port 55904 [preauth]
上述日志中的signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
说明sshd
不支持ssh-rsa
算法.
为了解决这个问题, 我们需要编辑/etc/ssh/sshd_config
并增加以下内容
/etc/ssh/sshd_config
PubkeyAcceptedAlgorithms +ssh-rsa
编辑完成后重启sshd
服务
sudo systemctl restart sshd