运维技术教程之Jenkins的秘钥设置

在Jenkins中使用SSH密钥时,不需要直接将私钥文件传递到Jenkins服务器 ,而是通过Jenkins的凭证管理功能安全地存储和使用私钥。以下是关键步骤和注意事项:


1. 生成SSH密钥对

  • 在Jenkins服务器(或任意客户端)上生成密钥对 :

    bash 复制代码
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    • 私钥默认保存在 ~/.ssh/id_rsa,公钥在 ~/.ssh/id_rsa.pub。
    • 无需以Jenkins用户身份生成密钥 ,但需确保Jenkins运行用户(如jenkins)有权限读取私钥文件(如果选择文件存储方式)。

2. 部署公钥到目标服务器

  • 将公钥内容添加到目标服务器的 ~/.ssh/authorized_keys 文件中:

    bash 复制代码
    echo "ssh-rsa AAA... your_public_key" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

3. 在Jenkins中配置私钥

  • 通过"Credentials"插件管理私钥 :
    1. 安装插件:确保Jenkins已安装 Credentials 和 SSH Agent 插件。
    2. 添加凭证:
      • 进入 Manage Jenkins → Manage Credentials → System → Global credentials。
      • 点击 Add Credentials ,选择类型 SSH Username with private key。
      • 输入:
        • Username :目标服务器的用户名(如root或deploy)。
        • Private Key :直接粘贴私钥内容(非文件路径),若私钥有密码则填写Passphrase。
      • 保存后,凭证将安全存储在Jenkins中。

4. 在Job中使用SSH凭证

  • 配置构建任务 :
    • 在Job的构建步骤中,选择 Execute shell 或 SSH Agent。
    • 若使用 SSH Agent,需指定之前添加的凭证ID(如 ssh-deploy-key),并在脚本中通过 ssh 命令执行远程操作。

为什么不需要直接传递私钥文件?

  1. 安全性风险 :
    • 直接传递私钥文件可能导致权限泄露(如Jenkins运行用户无关权限)。
    • 私钥可能被其他系统用户或进程访问。
  2. Jenkins设计理念 :
    • Jenkins通过 Credentials插件 统一管理敏感信息(如私钥、密码),避免明文存储。
    • 私钥以加密形式存储在Jenkins内部,仅在任务执行时临时加载到内存。

常见问题与解决方案

  • 问题1:Jenkins提示输入私钥密码

    • 原因 :私钥被加密(有Passphrase),但未在凭证配置中填写密码。
    • 解决 :在凭证配置的 Passphrase 字段中输入密码。
  • 问题2:无法连接目标服务器

    • 检查 :
      • 公钥是否正确部署到目标服务器的 authorized_keys。
      • 目标服务器的SSH端口、用户名是否正确。
      • Jenkins凭证是否选择正确的ID。

总结

  • 正确流程:生成密钥对 → 部署公钥到目标服务器 → 在Jenkins凭证中添加私钥 → 在Job中使用凭证。
  • 核心原则:私钥应通过Jenkins的凭证管理功能配置,而非直接传递文件,以确保安全性和可维护性。

参考文档:Jenkins Official SSH Plugin Documentation

相关推荐
木卫二号Coding5 小时前
推荐Linux统计文件大小并操作删除工具-ncdu
linux·运维·服务器
志栋智能6 小时前
超自动化运维:实现IT服务消费化的基础
运维·自动化
198******126346 小时前
2026企业AI办公工具选型指南:从评估框架到场景适配
大数据·运维·人工智能
吴声子夜歌6 小时前
Nginx应用与运维——Nginx HTTP模块详解(数据处理功能模块)
运维·nginx·http
2601_967212726 小时前
专利型电源轨道系统技术路线对比与选型框架
大数据·运维·网络·经验分享
数字化顾问7 小时前
(138页PPT)流程体系的建设优化与运营(附下载方式)
大数据·运维·人工智能
2601_967287578 小时前
轮胎侧壁上的 91V 是什么意思,负荷指数与速度级别怎么看
运维·服务器·汽车
小此方8 小时前
Linux网络(十九):TCP流量控制与滑动窗口详解,超时重传和快重传到底有什么区别
linux·运维·服务器·网络·网络协议·tcp/ip
海宇服务9 小时前
零信任架构实战:基于海宇运营商近3个月欠费次数构建自动化履约能力评估管线
运维·人工智能·架构·自动化
码上有光9 小时前
Linux进程通信——共享内存、消息队列和信号量
android·linux·运维·共享内存·通信