5

我正在使用 Capistrano 调用的 Chef。

有一个使用 git 克隆存储库的指令。

git node['rails']['rails_root'] do
  repository "git@myrepo.com:/myproj.git"
  reference "master"
  action :sync
  user node['rails']['rails_user']
  group node['rails']['rails_group']
end

当它到达这一点时,我得到:

 ** [out :: 10.1.1.1] STDERR: Host key verification failed.

所以,我需要添加一个“known_hosts”条目。没问题。但是对于哪个用户?我的问题的核心是我不知道哪个用户正在执行什么命令,以及他们是否正在调用 sudo 等。

我已经运行 keyscan 来填充 root 的 known_hosts,以及我作为 ssh 的用户,但无济于事。

注意,这个 git repo 是读保护的,并且需要 ssh 密钥访问。

4

4 回答 4

6

另一种解决方法https://github.com/opscode-cookbooks/ssh_known_hosts

这对我有用

于 2013-06-14T13:23:49.130 回答
5

您可以使用 ssh 包装器方法。在这里查看详细信息。

简单做以下步骤

首先,在 cookbooks/COOKBOOK_NAME/files/default 目录中创建一个名为 wrap-ssh4git.sh 的文件,其中包含以下内容:

#!/usr/bin/env bash
/usr/bin/env ssh -o "StrictHostKeyChecking=no" $1 $2

然后,使用以下块进行部署:

directory "/tmp/private_code/.ssh" do
  owner "ubuntu"
  recursive true
end

cookbook_file "/tmp/private_code/wrap-ssh4git.sh" do
  source "wrap-ssh4git.sh"
  owner "ubuntu"
  mode 00700
end

deploy "private_repo" do
  repo "git@github.com:acctname/private-repo.git"
  user "ubuntu"
  deploy_to "/tmp/private_code"
  action :deploy
  ssh_wrapper "/tmp/private_code/wrap-ssh4git.sh"
end
于 2014-03-16T08:34:56.083 回答
2

git 存储库将被克隆为用户node['rails']['rails_user'](通过https://docs.chef.io/resource_git.html) - 我假设用户 known_hosts 文件是您必须修改的文件。

于 2013-05-01T08:13:11.477 回答
1

我已经解决了这个问题如下

_home_dir = nil
node['etc']['passwd'].each do |user, data|
    if user.eql? node['jenkins']['username']
        _home_dir = data['dir']
    end
end
key_config ="Host *\n\tStrictHostKeyChecking no\n"
file "#{_home_dir}/.ssh/config" do
    owner node['jenkins']['username']
    group node['jenkins']['username']
    mode "0600"
    content key_config
end
于 2014-12-16T19:06:42.530 回答