bundle install 在通过 ansible playbook 安装 private gem 时挂起

bundle install hang while installing private gem via ansible playbook

我正在尝试 运行 bundle install 在远程主机上使用来自私人仓库的 gem。任务挂起是因为它停止接受主机密钥,因为我无法像在本地 运行 本地运行 ansible playbook 那样手动接受远程主机上的密钥。

Playbook task

  - name: bundle install
    command: bundle install chdir={{ deploy_directory }}

如何通过远程主机上存在的密钥文件测试或添加 github 连接。

我还尝试通过 ssh 与 github 建立测试连接,从而在安装包之前明确接受密钥。

  - name: test connection to git
    command: ssh -vvv git@github.co key_file=/home/ubuntu/.ssh/id_rsa accept_hostkey=yes

现在这个命令也挂了。

你可以把export ANSIBLE_HOST_KEY_CHECKING=False放在你的ansible play环境中。将此添加到您的游戏中以避免主机密钥检查。

environment:
    ANSIBLE_HOST_KEY_CHECKING:  False

可以尝试的另一种方法是将底层的严格密钥检查参数传递给您的 ssh 连接。参数是 - StrictHostKeyChecking=noUserKnownHostsFile=/dev/null 。您可以检查 ansible inventory ssh connection 并使用 ansible_ssh_common_argsansible_ssh_extra_args

根据 @Ankit_Kukarni 评论,我尝试将 github.com 添加到 known_hosts 文件中,最终成功了。

Adding following piece of code to the playbook

  - name: ensure github.com is a known host
    sudo: yes
    lineinfile:
      dest: /home/ubuntu/.ssh/known_hosts
      create: yes
      state: present
      line: "{{ lookup('pipe', 'ssh-keyscan -t rsa github.com') }}"
      regexp: "^github\.com"

可以找到详细的解释here