跳转到内容

Jenkins SSH密钥配置

来自代码酷

Jenkins SSH密钥配置[编辑 | 编辑源代码]

介绍[编辑 | 编辑源代码]

Jenkins SSH密钥配置是Jenkins与远程服务器(如Git仓库、部署目标服务器等)安全通信的核心步骤。通过SSH(Secure Shell)密钥对,Jenkins可以无需密码即可验证身份,实现自动化操作(如代码拉取、部署等)。本指南将详细介绍如何在Jenkins中生成、配置和使用SSH密钥。

为什么需要SSH密钥?[编辑 | 编辑源代码]

  • 安全性:比密码更安全,避免暴力破解风险。
  • 自动化:无需人工输入密码,适合CI/CD流程。
  • 权限控制:可通过公钥精确控制服务器访问权限。

生成SSH密钥对[编辑 | 编辑源代码]

在Jenkins服务器上生成密钥对(私钥保留在Jenkins,公钥上传到目标服务器):

  
# 生成RSA密钥对(默认路径:~/.ssh/id_rsa)  
ssh-keygen -t rsa -b 4096 -C "jenkins@yourdomain.com"  

# 输出示例  
Generating public/private rsa key pair.  
Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa):  
Enter passphrase (empty for no passphrase): [直接回车]  
Your identification has been saved in /var/lib/jenkins/.ssh/id_rsa.  
Your public key has been saved in /var/lib/jenkins/.ssh/id_rsa.pub.

关键参数说明[编辑 | 编辑源代码]

  • -t rsa:指定密钥类型为RSA。
  • -b 4096:密钥长度(推荐4096位)。
  • -C:注释信息(通常为邮箱或标识符)。

配置Jenkins使用SSH密钥[编辑 | 编辑源代码]

步骤1:将私钥添加到Jenkins[编辑 | 编辑源代码]

1. 登录Jenkins控制台,进入 Manage Jenkins > Credentials > System > Global credentials。 2. 点击 Add Credentials,选择类型为 SSH Username with private key。 3. 填写以下信息:

  * Username:远程服务器的SSH用户名(如gitdeploy)。  
  * Private Key:粘贴id_rsa文件内容或直接选择Enter directly

步骤2:将公钥部署到目标服务器[编辑 | 编辑源代码]

id_rsa.pub内容追加到目标服务器的~/.ssh/authorized_keys文件中:

  
# 在目标服务器上执行  
echo "公钥内容" >> ~/.ssh/authorized_keys  
chmod 600 ~/.ssh/authorized_keys

验证SSH连接[编辑 | 编辑源代码]

在Jenkins服务器上测试连接:

  
ssh -T git@github.com  # 测试GitHub  
ssh -T deploy@your-server-ip  # 测试部署服务器

成功输出示例: Hi username! You've successfully authenticated...

实际案例:Jenkins从GitHub拉取代码[编辑 | 编辑源代码]

场景[编辑 | 编辑源代码]

Jenkins需从私有GitHub仓库拉取代码进行构建。

配置步骤[编辑 | 编辑源代码]

1. 将公钥添加到GitHub账户的Settings > SSH and GPG keys。 2. 在Jenkins任务中配置Git仓库地址为SSH格式(如git@github.com:user/repo.git)。 3. 选择之前添加的SSH凭证。

flowchart LR A[Jenkins生成密钥对] --> B[公钥上传至GitHub] B --> C[Jenkins配置私钥] C --> D[任务中使用SSH拉取代码]

故障排除[编辑 | 编辑源代码]

常见问题及解决方案
错误 原因 解决方法
Permission denied (publickey) 公钥未正确部署 检查authorized_keys文件权限(应为600)
Host key verification failed 服务器指纹未信任 手动执行一次SSH连接以确认指纹

高级配置[编辑 | 编辑源代码]

多密钥管理[编辑 | 编辑源代码]

为不同服务器使用不同密钥对:

  
# 生成第二个密钥对  
ssh-keygen -t ed25519 -f ~/.ssh/jenkins_deploy

~/.ssh/config中指定密钥:

  
Host github.com  
  IdentityFile ~/.ssh/id_rsa  

Host deploy-server  
  HostName 192.168.1.100  
  IdentityFile ~/.ssh/jenkins_deploy

密钥加密(Passphrase)[编辑 | 编辑源代码]

生成密钥时设置密码(Passphrase),并通过ssh-agent管理:

  
eval $(ssh-agent)  
ssh-add ~/.ssh/id_rsa  # 输入Passphrase

数学原理补充[编辑 | 编辑源代码]

SSH-RSA密钥基于大数分解难题,公钥为: (n,e)=(p×q,e) 其中p,q为大素数,私钥为de1modϕ(n)

总结[编辑 | 编辑源代码]

通过SSH密钥配置,Jenkins可实现安全、自动化的远程操作。初学者应重点关注密钥生成和基础验证,高级用户可探索多密钥管理和加密优化。