Ubuntu服务器升级后Jenkins SSH私钥认证失败求助
Ubuntu升级后Jenkins SSH私钥认证失败问题排查与求助
我在Ubuntu服务器的Docker中部署了Jenkins实例,该实例通过「Execute shell script on remote host using ssh」插件以私钥认证方式连接同一台Ubuntu服务器执行任务,正常运行已超过一年。近期通过do-release-upgrade升级Ubuntu版本后,所有连接该服务器的SSH脚本均出现认证失败。
错误信息
[SSH] executing... [SSH] Exception:Auth fail com.jcraft.jsch.JSchException: Auth fail
已完成的排查操作
- 连接其他机器的SSH脚本仍正常运行,排除SSH插件或Jenkins本身的问题,确认问题出在目标服务器端。
- 配置私钥认证的两个用户(
<user>和root)均无法连接,排除特定用户的问题,定位为服务器层面的问题。 - 执行简单的
echo "hello"脚本仍出现相同错误,确认脚本本身无修改且无问题。 - 切换为用户名密码认证可正常连接,排除机器/代理拦截、IP/端口错误等基础问题,确认仅私钥认证失效。
- 按原有流程重新生成多种密钥(包括不同参数的RSA密钥,带/不带密码短语),复制私钥到Jenkins后仍无效。
- 完全删除并重建
~/.ssh/文件夹,问题依旧存在。 - 使用Jenkins中相同的私钥从Macbook可正常登录服务器(命令:
ssh -i key.pem <user>@<ip> -p <port>),证明密钥本身无问题。 - 升级后Macbook需删除
known_hosts中该服务器旧记录,但Jenkins配置中无相关设置;结合密码认证正常,说明连接无阻碍,而是Jenkins无法正确使用私钥。 - 还原了升级后变更的
/etc/ssh/sshd_config部分设置(如将PasswordAuthentication no改回yes,与升级前一致),脱敏后的配置见附录。 - 升级Jenkins及其所有插件,问题未解决。
虽然用户名密码认证可用,但我希望恢复私钥认证(更安全且便于权限管理),求解决方法或下一步排查方向。
附录
密钥生成变体
通用方式
# 生成密钥 mkdir ~/.ssh; cd ~/.ssh/ && ssh-keygen -t rsa -m PEM -C "Jenkins agent key" -f "jenkinsAgent_rsa" # 授权密钥 cat jenkinsAgent_rsa.pub >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ~/.ssh/jenkinsAgent_rsa # 获取Jenkins用私钥 cat ~/.ssh/jenkinsAgent_rsa
带root权限执行
# 在其他命令前执行 sudo su $AGENT_USER
或
# 在其他命令前执行 sudo su
不同密钥生成命令
ssh-keygen -t rsa -b 4096 -m PEM -C "Jenkins agent key" -f "jenkinsAgent_rsa"
ssh-keygen -t rsa -C "Jenkins agent key" -f "jenkinsAgent_rsa"
生成的密钥格式(内容已脱敏)
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,518C612F99A868<somecharsremoved>09C9A6047E20 sDqB0yOas0sf4dJRLvb8IxyOvoIwr8Ls3uMbugwTOJ/ (...) MuZyUzWXnhUaWgnXJlTLhnmXiJ9XgUClYftQpP4RZw9Ult/dje5XD81RmwwhuxUV -----END RSA PRIVATE KEY-----
sshd_config(已移除所有注释)
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games Include /etc/ssh/sshd_config.d/*.conf Port <port> # 原配置为`ChallengeResponseAuthentication no`,现改为此项,认为无影响 KbdInteractiveAuthentication no UsePAM yes X11Forwarding yes PrintMotd no AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server PasswordAuthentication yes
内容的提问来源于stack exchange,提问作者nitobuendia
相关产品推荐
相关产品推荐

