当前位置: 首页 > news >正文

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

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


1. 生成SSH密钥对

  • 在Jenkins服务器(或任意客户端)上生成密钥对
    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 文件中:
    echo "ssh-rsa AAA... your_public_key" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    

3. 在Jenkins中配置私钥

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

4. 在Job中使用SSH凭证

  • 配置构建任务
    • 在Job的构建步骤中,选择 Execute shellSSH 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

http://www.xdnf.cn/news/1124875.html

相关文章:

  • Git分支管理与工作流详解
  • ADC采集、缓存
  • HAProxy双机热备,轻松实现负载均衡
  • 聊聊MySQL中的buffer pool
  • 分布式通信框架 - JGroups
  • 深度强化学习 | 图文详细推导深度确定性策略梯度DDPG算法
  • [数据结构]#3 循环链表/双向链表
  • 为什么市场上电池供电的LoRa DTU比较少?
  • FBRT-YOLO: Faster and Better for Real-Time Aerial Image Detection论文精读(逐段解析)
  • 【HarmonyOS】元服务概念详解
  • 16.避免使用裸 except
  • ELK部署与使用详解
  • L1与L2正则化详解:原理、API使用与实践指南
  • Windows下安装nvm管理多个版本的node.js
  • LVS集群技术
  • 网络--OSPF实验
  • 分布式一致性协议
  • 卷积模型的优化--Dropout、批标准化与学习率衰减
  • 每天一个前端小知识 Day 31 - 前端国际化(i18n)与本地化(l10n)实战方案
  • 分支战略论:Git版本森林中的生存法则
  • PHP password_get_info() 函数
  • 时序预测 | Pytorch实现CNN-LSTM-KAN电力负荷时间序列预测模型
  • 深入理解MyBatis延迟加载:原理、配置与实战优化
  • 设备发出、接收数据帧的工作机制
  • B站自动回复工具(破解)
  • Linux连接跟踪Conntrack:原理、应用与内核实现
  • JAVA进阶--JVM
  • 【Linux网络】:HTTP(应用层协议)
  • rk3588平台USB 3.0 -OAK深度相机适配方法
  • 网络编程(TCP连接)