【问题标题】:Git authentication in ChefChef 中的 Git 身份验证
【发布时间】:2013-12-26 12:43:15
【问题描述】:

在使用 Chef 部署应用程序时,我已将代码库设置为从具有以下资源的私有 github 存储库中克隆:

git '/mnt/application' do
    repository 'git@github.com:organization/repository'

    reference 'master'
    action :sync

    user node.application.user
    group node.application.user
end

但是,在扫描git 资源的文档后,我看不到您如何提供用于身份验证的密钥文件。我也对如何将此密钥存储在数据包中感到困惑,因为该文件包含一堆新行。有什么想法吗?

【问题讨论】:

  • 我已经详细说明了工作流程here

标签: git ssh chef-infra


【解决方案1】:
ssh_wrapper "ssh -i /some/path/id_rsa"

如果有人遇到这个问题,上面的方法对我不起作用,我一直收到错误:

error: cannot run ssh -i /some/path/id_rsa: No such file or directory

指定 ssh_wrapper 的作用是设置 GIT_SSH 环境变量,结果您无法在 GIT_SSH 环境变量中提供参数(请参阅Git clone with custom SSH using GIT_SSH error)。

相反,您需要先将脚本写入文件,然后将 GIT_SSH 设置为该文件。

所以:

file "/some/path/git_wrapper.sh" do
  owner "your_user"
  mode "0755"
  content "#!/bin/sh\nexec /usr/bin/ssh -i /some/path/id_rsa \"$@\""
end

并将git资源部分更改为:

git "/opt/mysources/couch" do
  repository "git://git.apache.org/couchdb.git"
  reference "master"
  action :sync
  ssh_wrapper "/some/path/git_wrapper.sh"
end

【讨论】:

  • 这也是我的经验。同样的问题,同样的解决方案。
  • 另外,将-o "StrictHostKeyChecking=no" 参数添加到 ssh 以跳过主机密钥检查也很有用。
  • 这个答案对于它所做的细节很有用,但它缺乏关于如何将私钥放到节点上的解释。当然,这可以手动完成,但在此之前,这将失败。
【解决方案2】:

我们对 Mercurial 使用类似的设置,但我希望它应该与 Git 相同。

我们使用 ssh 密钥进行身份验证。密钥存储在加密的数据包中(用“\n”替换换行符)。首先,这个私钥是从数据包的节点上创建的。

git_key = Chef::EncryptedDataBagItem.load( "private_keys", "git_key" )
file "/some/path/id_rsa" do
  content git_key['private']
end

然后在使用 ssh_wrapper 连接到 git 仓库时使用它:

git "/opt/mysources/couch" do
  repository "git://git.apache.org/couchdb.git"
  reference "master"
  action :sync
  ssh_wrapper "ssh -i /some/path/id_rsa" #the path to our private key file
end

【讨论】:

  • 嘿 Draco,这对我来说是新的,我正在阅读 doc 但我有点挣扎。如果您能详细说明(勺子馈送)如何将 SSH 密钥存储在加密的数据包中,这对于像我这样的新手来说会很有帮助。希望你能抽出时间。
  • `刀数据包创建private_keys git_key --secret-file ~/.ssh/id_rsa`这是你怎么做的?
  • content git_key[:private] 对我不起作用,但 content git_key['private'] 对我有用
【解决方案3】:

如果您在 linux 发行版中,请将您的 ssh 密钥存储在 <your home directory>/.ssh 并将 github.com 添加到 <your home directory>/.ssh/known_hosts

您可以使用以下命令将 github.com 添加到 known_hosts

ssh-keyscan -H github.com >> <your home directory>/.ssh/known_hosts

完成此操作后,您可以使用 git 厨师资源克隆您的回购

【讨论】:

  • Vineeth - 我认为它们适用于 GitHub(和其他)私有存储库,它们使用 SSH 密钥进行身份验证,并且不会让您在没有它的情况下进行克隆。
【解决方案4】:

我遇到了同样的问题,我唯一缺少的是这个命令,然后一切顺利:

GIT_SSH_COMMAND="ssh -i ~/.ssh/bitbucket_rsa"

参考和我的整个步骤可以在我的博客上找到:http://www.sadafnoor.com/blog/simplest-way-to-write-your-chef-cookbook-that-git-clone-private-repo-using-bitbucket-deploy-key/

【讨论】:

    【解决方案5】:

    基于sadaf2605hint,这对我来说是最简单的方法——我只需要确保设置正确的用户/组并关闭 StrictHostKeyChecking:

    git '/path/to/destination' do
      environment 'GIT_SSH_COMMAND' => 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /path/to/private_key'
      repository 'git@github.com:your/repo.git'
      reference 'master'
      action :sync
      user 'vagrant'
      group 'vagrant'
    end
    

    【讨论】:

      【解决方案6】:

      你应该试试这本食谱https://github.com/poise/application_git。它解决了你提到的问题。

      有了这个食谱,你可以使用application_git资源,指定私钥:

      application_git '/srv/myapp' do
        repository 'git@github.com:organization/repository'
        deploy_key '/some/path/id_rsa'
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-28
        • 1970-01-01
        • 2014-06-30
        • 1970-01-01
        • 2011-08-22
        • 2014-08-24
        • 2018-11-05
        相关资源
        最近更新 更多