Jenkins怎么配置SSH免密登录?远程服务器部署步骤是什么?

文章导读
Jenkins 配置 SSH 免密登录需在 Jenkins 服务运行用户目录下生成密钥对,并将公钥写入远程服务器授权文件,随后在 Jenkins 系统设置中安装 Publish Over SSH 插件完成连接配置。远程部署通过构建后操作调用 SSH 命令或传输文件实现,适用于自动化发布到 Linux 服务器场景。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Jenkins 配置 SSH 免密登录需在 Jenkins 服务运行用户目录下生成密钥对,并将公钥写入远程服务器授权文件,随后在 Jenkins 系统设置中安装 Publish Over SSH 插件完成连接配置。远程部署通过构建后操作调用 SSH 命令或传输文件实现,适用于自动化发布到 Linux 服务器场景。

先说结论:适合 Jenkins 自动化部署到远程 Linux 服务器场景,核心是密钥权限正确且插件配置匹配。

  • 先准备 Publish Over SSH 插件与 RSA 密钥对
  • 先处理密钥文件权限与属主(700/600)
  • 验收插件测试连接返回 Success

命令速用版

以下命令需在 Jenkins 服务器终端执行,注意区分当前操作用户是 root 还是 jenkins 用户。

生成密钥对(连续回车不设置密码):

ssh-keygen -t rsa

复制公钥到远程服务器:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_ip

修正权限(远程服务器):

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

为什么会这样

SSH 免密登录基于非对称加密原理,本地持有私钥,远程服务器持有公钥。

连接时远程服务器生成随机字符串并用公钥加密,本地用私钥解密后返回,验证匹配则允许登录。Jenkins 作为自动化服务,无法人工输入密码,必须依赖密钥对认证。若密钥权限过于开放(如 777),SSH 服务出于安全考虑会拒绝读取,导致认证失败。

分步处理

1. 确认 Jenkins 运行身份

Jenkins 默认以系统用户 jenkins 运行,家目录通常为/var/lib/jenkins,而非/root。若密钥生成在 root 目录下,jenkins 用户无权读取。需确保密钥生成在 jenkins 用户目录下,或调整属主为 jenkins:jenkins。

Jenkins怎么配置SSH免密登录?远程服务器部署步骤是什么?

2. 生成密钥对

在 Jenkins 服务器终端执行 ssh-keygen -t rsa,默认生成在~/.ssh/id_rsa 和 id_rsa.pub。若 Jenkins 以 docker 运行,需进入容器内部生成。

3. 部署公钥到远程服务器

将 id_rsa.pub 内容追加到远程服务器对应用户的~/.ssh/authorized_keys 文件中。首次连接可能需要手动输入密码确认指纹。

4. 安装 Publish Over SSH 插件

进入 Jenkins 系统管理 -> 插件管理,搜索并安装 Publish Over SSH 插件。安装后需重启 Jenkins 服务。

5. 配置 SSH 服务器信息

进入系统管理 -> 系统设置,找到 Publish over SSH 区域。添加 SSH Server,填写 Name、HostName、UserName。认证方式选择密钥文件路径(Path to key)或密码。点击 Test Configuration 测试连接。

6. 配置构建任务

在任务配置页底部找到构建后操作,选择 Send build artifacts over SSH。填写 Source files(相对工作区路径)、Remove prefix 和 Remote directory。也可选择 Exec command 执行远程 shell 脚本。

怎么验证是否生效

在 Jenkins 系统设置的 SSH 配置页点击 Test Configuration,若返回 Success 则插件层连接正常。

在 Jenkins 服务器终端手动执行 ssh user@remote_ip,若能直接登录无密码提示,则系统层免密生效。

运行一次构建任务,查看控制台日志,若未出现 permission denied (publickey) 或 connection timed out 且远程文件已更新,则部署成功。

Jenkins怎么配置SSH免密登录?远程服务器部署步骤是什么?

常见坑

密钥文件权限错误:私钥 id_rsa 权限必须为 600,.ssh 目录权限为 700,否则 SSH 服务端拒绝认证。

用户身份混淆:Jenkins 服务用户与生成密钥的操作系统用户不一致,导致插件读取不到私钥文件。

远程目录不存在:Publish Over SSH 传输文件时,若 Remote directory 路径在远程服务器不存在且未配置自动创建,可能导致传输失败。

Known_hosts 拦截:首次连接远程服务器时,若未手动确认指纹,可能因 strict host key checking 导致连接中断。

常见问题

Jenkins 配置 SSH 时提示 Permission denied?

检查 Jenkins 运行用户是否有权读取私钥文件,并确保远程服务器 authorized_keys 权限为 600。

Docker 安装的 Jenkins 如何配置密钥?

需进入容器内部生成密钥,或将宿主机密钥目录挂载到容器内/var/lib/jenkins/.ssh 路径。

可以使用密码代替密钥免密登录吗?

Publish Over SSH 插件支持密码认证,但安全性低于密钥,且需确保远程服务器 sshd_config 允许密码登录。

参考来源

Jenkins 如何配置 SSH 免密登录远程服务器?_编程语言-CSDN 问

windows jenkins 配置 ssh 免密登录

Jenkins 配置远程服务器之 Publish over SSH、SSH Servers、以及 Linux 系统生成 RSA 公私密钥

Jenkins Publish over SSH、SSH 免密登录、SCP 免密传输、Jenkins 远程传输文件、Jenkins 远程部署 - root-123 - 博客园

jenkins 与远程服务器配置 SSH 免密登录

Jenkins 持续集成:Linux 系统 两台机器互相免密登录