步骤1. 在Jenkins服务器上生成SSH密钥
在Jenkins服务器上执行以下命令:
# 1. 生成SSH密钥对
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
# 2. 设置正确的权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
# 3. 查看公钥内容
cat ~/.ssh/id_rsa.pub
步骤2. 复制公钥到目标服务器
方法1:使用ssh-copy-id(推荐)
# 在Jenkins服务器上执行
ssh-copy-id username@target-server-ip
方法2:手动复制
1. 在Jenkins服务器上复制公钥内容:
```bash
cat ~/.ssh/id_rsa.pub
```
2. 在目标服务器上创建或编辑authorized_keys文件:
```bash
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "ssh-rsa AAAA..." >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
有些目标服务器配置在 /root/.ssh/ 路径下
步骤3. 验证SSH连接
在Jenkins服务器上测试SSH连接:
ssh username@target-server-ip
步骤4:配置Jenkins SSH凭据
-
登录Jenkins Web界面
-
进入 "Manage Jenkins" > "Manage Credentials"
-
点击 "System" > "Global credentials" > "Add Credentials"
-
选择 "SSH Username with private key"
-
配置以下信息:
-
ID: `jenkins-ssh-key`
-
Description: `Jenkins SSH Key for deployment`
-
Username: `目标服务器用户名`
-
Private Key: 选择 "Enter directly" 并粘贴私钥内容
-
Passphrase: 留空(如果密钥没有密码)
步骤5:在Jenkins Pipeline中使用SSH
在Jenkinsfile中添加SSH步骤:
```groovy
stage('Deploy') {
steps {
script {
// 使用SSH执行远程命令
sshagent(['jenkins-ssh-key']) {
sh '''
ssh username@target-server-ip '
echo "连接到目标服务器成功"
# 执行部署命令
/opt/scripts/deploy-zj.sh
'
'''
}
}
}
}
```
常见问题排查
1. 权限问题
# 检查SSH目录权限
ls -la ~/.ssh/
# 修复权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys
- SSH服务配置
确保目标服务器的 `/etc/ssh/sshd_config` 包含:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
-
测试SSH连接
详细模式测试SSH连接
ssh -v username@target-server-ip
使用指定密钥测试
ssh -i ~/.ssh/id_rsa username@target-server-ip
安全建议
使用强密码或密钥密码
定期轮换SSH密钥
限制SSH用户权限
使用防火墙限制SSH访问
监控SSH登录日志