步骤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凭据

1. 登录Jenkins Web界面

2. 进入 "Manage Jenkins" > "Manage Credentials"

3. 点击 "System" > "Global credentials" > "Add Credentials"

4. 选择 "SSH Username with private key"

5. 配置以下信息:

   - 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

2. SSH服务配置

确保目标服务器的 `/etc/ssh/sshd_config` 包含:

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

3. 测试SSH连接

# 详细模式测试SSH连接
ssh -v username@target-server-ip

# 使用指定密钥测试
ssh -i ~/.ssh/id_rsa username@target-server-ip

安全建议

1. 使用强密码或密钥密码

2. 定期轮换SSH密钥

3. 限制SSH用户权限

4. 使用防火墙限制SSH访问

5. 监控SSH登录日志

更多推荐