You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:16:35