与厨师用ssh键结账git repo

twr*_*eid 2 git ssh chef-infra

您好我的主厨要使用我的data_bag中的ssh密钥来检查我的git repo.

以下是我的git资源:

repo_key = search(:git, "id:git_key").first
git_key_file = "#{Chef::Config['file_cache_path']}/git_key/id_rsa"

directory "#{Chef::Config['file_cache_path']}/git_key" do
    action :create
end

file git_key_file do
    content repo_key['deploy_key']
    mode "0755"
    action :create_if_missing
end

git "/usr/share/my_repo" do
    repository "git@github.com:my_name/some_repo.git"
    checkout_branch "#{node["my_app"][:test_branch]}"
    action :sync
    ssh_wrapper "ssh -i #{git_key_file}"
end
Run Code Online (Sandbox Code Playgroud)

当我跑:sudo chef-client我得到以下错误:

STDERR: error: cannot run ssh -i /var/chef/cache/git_key/id_rsa: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我已经进入服务器,我可以验证密钥文件是否在适当的位置并包含密钥.

Ada*_*nco 6

虽然您的私钥文件可能在正确的位置,但我的[有限]理解是GIT_SSH变量必须是可执行脚本的路径而不是命令本身.

值得庆幸的是,有一种更简单的方法可以设置Git,使每个存储库使用特定的SSH密钥,而不依赖于设置环境变量或创建新脚本.此超级用户答案中描述了一般过程,即将自定义SSH命令指定为存储库位置中的"外部传输".以下是我在Chef配方中使用该方法的方法:

# Add a deployment key to the node from chef-vault, e.g. at 
#    /path/to/some_repo_deployment_key
#    /path/to/some_repo_deployment_key.pub

git "/usr/share/my_repo" do
  # The following line ensures that our repo-specific deployment 
  # ssh-key will be used for all clone & fetch operations.
  repository "ext::ssh -i /path/to/some_repo_deployment_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no git@github.com %S /my_name/some_repo.git"
  checkout_branch "master"
  action :sync
end
Run Code Online (Sandbox Code Playgroud)

仓库已被克隆后,git fetchgit push从工作目录中的操作将使用相同的密钥,从而进一步自动化更加独立的环境设置比某些依赖于其他技术ssh的关键发现机制.