Jenkins构建步骤无法SSH连接Ubuntu 16.04服务器问题求助
问题分析与解决思路
这个问题我之前碰到过,核心原因大概率是Jenkins服务的运行用户和你终端使用的用户不一致——你在终端用ubuntu用户能正常SSH,但Jenkins默认是用jenkins系统用户运行的,它没法访问ubuntu用户下的密钥文件,导致密钥认证失败,触发了"Permission denied"错误。
结合你给出的权限配置来看,~/.ssh和密钥文件的权限都是符合SSH要求的,所以问题不在权限本身,而在Jenkins能不能拿到密钥。下面是具体的排查和解决步骤:
1. 先确认Jenkins的运行用户
在Jenkins服务器终端执行命令,查看Jenkins进程的所属用户:
ps aux | grep jenkins
输出里第一列就是运行用户,几乎可以肯定是jenkins而非你终端用的ubuntu。这就解释了为什么终端能连但Jenkins构建不行——jenkins用户没有权限读取ubuntu用户/home/ubuntu/.ssh目录下的密钥。
2. 让Jenkins能访问到SSH密钥
有两种常用的解决方式,推荐第一种更安全的方案:
方式一:给jenkins用户单独配置SSH密钥
- 切换到
jenkins用户(如果该用户没有默认登录shell,先指定bash):su -s /bin/bash jenkins - 在
jenkins用户的家目录下创建.ssh目录并设置严格权限:mkdir -p ~/.ssh chmod 700 ~/.ssh - 将
ubuntu用户下的密钥复制过来,并修正权限:cp /home/ubuntu/.ssh/id_rsa ~/.ssh/ cp /home/ubuntu/.ssh/id_rsa.pub ~/.ssh/ chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub - 最后测试
jenkins用户能否SSH到目标服务器:ssh ubuntu@你的目标服务器IP
如果能成功连接,再回到Jenkins重新运行构建步骤即可。
方式二:在Jenkins构建步骤中指定密钥路径(不推荐,安全性较低)
如果你不想单独配置jenkins用户的密钥,可以直接指定ubuntu用户的密钥路径,但需要给jenkins用户授权读取:
sudo chmod o+r /home/ubuntu/.ssh/id_rsa
然后在Jenkins的SSH构建步骤配置里,找到密钥相关选项,选择"From file"并填入路径/home/ubuntu/.ssh/id_rsa。
3. 生产环境推荐:用Jenkins凭据管理密钥
更规范的做法是把SSH密钥存入Jenkins的凭据系统:
- 进入Jenkins后台的「凭据」→「系统」→「全局凭据」,点击「添加凭据」。
- 选择「SSH Username with private key」类型,填写目标服务器的用户名(比如
ubuntu),然后选择「Enter directly」粘贴私钥内容,或者「From file」指定密钥路径。 - 在SSH构建步骤中,直接选择刚才创建的凭据,无需手动输入密钥或密码。
4. 额外排查点
如果以上步骤都没解决,可以检查:
- 目标服务器的
/etc/ssh/sshd_config配置,确保PubkeyAuthentication yes开启,且没有限制jenkins用户或源IP的登录规则。 - 查看Jenkins构建日志的详细输出,有没有更具体的错误提示(比如"Permission denied (publickey,password)"),这会进一步确认是密钥认证的问题。
内容的提问来源于stack exchange,提问作者jrc16
相关产品推荐
相关产品推荐

