与厨师用ssh键结账git repo

时间:2014-06-03 20:57:32

标签: git ssh chef

您好我的厨师使用我的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

当我跑步时:sudo chef-client我收到以下错误:

STDERR: error: cannot run ssh -i /var/chef/cache/git_key/id_rsa: No such file or directory

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

3 个答案:

答案 0 :(得分:6)

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

值得庆幸的是,有一种更简单的方法可以设置Git,使每个存储库使用特定的SSH密钥,而不依赖于设置环境变量或创建新脚本。一般过程在this SuperUser answer中描述,它将自定义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

在克隆存储库之后,工作目录中的git fetchgit push操作将使用相同的密钥,使得进一步的自动化更多地独立于环境设置而不是依赖于其他一些技术。在ssh的密钥发现机制上。

答案 1 :(得分:1)

好像你找到了答案(权限过于开放),但这是我的ssh手册页中的相关信息:

 ...
 ~/.ssh/identity
 ~/.ssh/id_dsa
 ~/.ssh/id_ecdsa
 ~/.ssh/id_ed25519
 ~/.ssh/id_rsa
         Contains the private key for authentication.  These files contain sensitive data and should be readable by the user but not accessible by others (read/write/execute).
         ssh will simply ignore a private key file if it is accessible by others.  It is possible to specify a passphrase when generating the key which will be used to encrypt the sensitive part of this file using 3DES.

答案 2 :(得分:0)

我实际上通过以下方式解决了这个问题:

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

在大厨食谱上添加如下内容:

scanf("%s",archivio[i].cognome);

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