Surou 发布的文章

jenkins 配置 ssh 访问GitHub


生成 SSH key(推荐 ed25519)

ssh-keygen -t ed25519 -C "jenkins@your-domain" -f /var/jenkins_home/.ssh/id_ed25519

生成后会有:

  • 私钥:/var/jenkins_home/.ssh/id_ed25519
  • 公钥:/var/jenkins_home/.ssh/id_ed25519.pub

把公钥加到 Git 仓库平台(以 GitHub 为例)

  1. 查看公钥内容:

    cat /var/jenkins_home/.ssh/id_ed25519.pub
  2. 打开 GitHub → 右上角头像 → Settings → SSH and GPG keys → New SSH key

  3. 把刚才复制的公钥粘贴进去,保存。
    GitLab / Gitea / 自建 Git 也类似:找到 SSH Keys 设置,加进去即可。

在 Jenkins 里添加 SSH 凭据(Credentials)

  1. 打开 Jenkins Web 页面。
  2. 左侧:Manage Jenkins → Credentials → (Global)
  3. 右侧:Add Credentials
  4. 选择:
    • KindSSH Username with private key(中文界面类似)
    • Username
      • GitHub / GitLab 通常填写:git
    • Private Key
      • Enter directly
      • /var/jenkins_home/.ssh/id_ed25519 里的内容复制进去
        (用 cat /var/jenkins_home/.ssh/id_ed25519 查看,然后复制)
    • ID / Description:随便填一个有意义的,比如:github-ssh-universe
  5. 保存。

配置 Job 使用 SSH 仓库 + 关联凭据

1. 确保仓库 URL 是 SSH 形式

例如 GitHub:

git@github.com:xxx/xxx.git

不是:

https://github.com/xxx/xxx.git

在 Pipeline(Jenkinsfile)里使用 SSH 凭据(可选)

如果你用的是声明式 Pipeline,可以这样写:

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main',
                    url: 'git@github.com:universe-web3/universe-deploy-ansible.git',
                    credentialsId: 'github-ssh-universe'
            }
        }
    }
}

注意

Jenkins 用 SSH 拉 github.com 时,要求严格校验证书(StrictHostKeyChecking=yes),但 known_hosts 里没有 github.com 的主机指纹,所以直接拒绝。

在 Jenkins Web 界面里调整 Git Host Key 策略

可以让 Jenkins 自己“自动信任”第一次连接的 host key(安全性稍差,但在你自己控制的环境里一般也可以接受)。

  1. 打开 Jenkins → 左侧 Manage Jenkins
  2. 找到 Configure Global Security
  3. 往下找到 Git Host Key Verification Configuration
  4. 选择其中一个策略:
    • Known hosts file Verification Strategy(默认,配合上面方案一)
    • 或者 Accept first connection(第一次自动接受 host key,以后照这个校验)

保存之后,再去构建你的 Job 试一次。