github - 通过 Vagrant 为 Jenkins 和 GIthub 自动配置 SSH key

标签 github ssh vagrant ssh-keys sshd

我正在使用 Vagrant 来配置我们的开发环境。

Vagrant 做了类似以下的事情:

  • 安装 Jenkins(和 Java,因为它是一个依赖项)
  • ...安装其他依赖项....
  • 私有(private)复制id_rsa /.ssh 的 SSH key 在 $JENKINS_HOME这是/var/lib/jenkins/
  • 运行克隆所有 GitHub 存储库并构建和部署项目的脚本。

  • 我们遇到的问题是 #3在上面的列表中。

    由于我们需要在脚本中运行它,因此我们无法手动对 GitHub 运行命令以将条目添加到 known_hosts。 .所以我尝试使用以下内容:
    sudo -u jenkins ssh-keyscan github.com > /var/lib/jenkins/.ssh/known_hosts
    

    我也尝试在不使用 jenkins 的情况下运行它。用户但未成功。

    这是 Vagrantfile 的脚本在安装 Jenkins 后引用。
    #Setup SSH for GitHub
    echo "Configuring GitHub SSH Keys..."
    if [ ! -d /var/lib/jenkins/.ssh ];
    then
    
    #copy private key to $JENKINS_HOME/.ssh
    sudo mkdir -p /var/lib/jenkins/.ssh
    sudo cp /vagrant/ssh/id_rsa /var/lib/jenkins/.ssh/
    
    #Modify permissions so jenkins user can access
    sudo chown -R jenkins:jenkins /var/lib/jenkins/.ssh/
    sudo chmod 0600 /var/lib/jenkins/.ssh
    sudo chmod 0600 /var/lib/jenkins/.ssh/id_rsa
    
    #Add GitHub to known_hosts so it doesn't prompt us
    sudo -u jenkins ssh-keyscan github.com > /var/lib/jenkins/.ssh/known_hosts
    
    else
      echo "GitHub SSH Keys already configured..."
    fi
    

    我这样做完全错了吗?

    我的 目标 是能够将我的私钥复制到任何需要去的地方,这样我就可以向 GitHub(来自 Jenkins)发出请求,而无需任何手动交互。

    我的 问题 是我似乎无法在没有脚本或 CHMODing 自己进入权限受限的角落的情况下做到这一点。

    我已经引用并看到了类似的问题,例如帖子引用的打击

    Authenticate Jenkins CI for Github private repository

    最佳答案

    一种解决方案是使用 ssh_config 选项 GlobalKnownHostsFile ,默认位于 /etc/ssh/ssh_known_hosts -- 如果您在此处存储 github 公钥(在根目录下使用 ssh-keyscan),则无需使用 chmod 之类的东西做任何魔术。

    关于github - 通过 Vagrant 为 Jenkins 和 GIthub 自动配置 SSH key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31461699/

    相关文章:

    python - Fab 未找到主机 key

    azure - 使用vagrant创建虚拟机出错

    vagrant - 增加特定 vagrant box 的内存

    ssh - 如何在 vagrant 基础(基线)框中包含并引用自定义 ssh key ? (虚拟盒)

    github - 如何安全地将 Github App Install ID 与与 GitHub App 集成的网站帐户关联?

    azure - 如何将 Azure 与 Github 同步,问题 : Cannot find path 'D:\a\1\s\because it does not exist; Repository not found fetch failed; Filename too long

    git - Jenkins:Git 推送将触发仅针对该分支的 Jenkins 构建

    git - 从错误的分支开始,如何在 pull 请求中将我的更改放入正确的分支?

    git - 远程 git repo digital ocean ubuntu

    python - Ansible 社区.general.ssh_config : ModuleNotFoundError: No module named 'storm'