26

我正在使用 Ansible,我很难让 git 模块正常工作。我已经阅读了几篇有同样问题的人的帖子,我查看了 ansible 文档,我几乎尝试了所有内容。在他们使用 git 之前,我找到了一个清晰的教程,但是当我使用我的存储库时再次遇到问题......:/ git 任务只是挂起......没有错误,它只是卡住了!

这是我的主机文件:

[web]
dev1 ansible_ssh_host=10.0.0.101 ansible_ssh_user=root

这是在我计算机上的 virtualbox 上运行的 vagrant VM。

我从本教程中获取了剧本并执行了所有步骤,直到步骤 08:https ://github.com/leucos/ansible-tuto/tree/master/step-08

我在我的虚拟机上运行它,它工作正常,然后我添加了一个任务“部署我的代码”来使用我的存储库......但是这个任务不起作用。它是 bitbucket 上的私有存储库。这有什么不同吗?

- hosts: web
  tasks:

    - name: Deploy our awesome application
      action: git repo=https://github.com/leucos/ansible-tuto-demosite.git dest=/var/www/awesome-app
      tags: deploy

    - name: Deploy my code
      action: git repo=https://YAmikep@bitbucket.org/YAmikep/djangotutorial.git dest=/var/www/my-app
      tags: deploy

用户可能有问题,或者用户正在运行 ansible,或者密钥等,但是我来回尝试了几个小时,现在我更加困惑......我只是不知道现在该怎么调试它找出什么是错的,我错过了什么。

谢谢。

4

7 回答 7

15

git 模块可能挂起的原因有几个,但最可能的原因是该git clone命令正在等待确认是否应将主机密钥添加到服务器的已知主机。要验证这是否是问题,请使用标志执行 ansible: --verbose,以便它以详细模式运行,这将为您提供有关错误的更多信息。

如果您确认已知主机是问题所在,那么您有两种选择:

解决方案 1

为避免git模块出现此问题,请使用accept_hostkey参数。

- name: ensure jquery repo is available
  git: git@github.com:jquery/jquery.git version=master accept_hostkey=True

解决方案 2

在使用核心模块之前使用ansible-sshknownhosts第三方git模块:

- name: ensure github is a known host
  action: sshknownhosts host=github.com state=present 

- name: ensure jquery repo is available
  git: git@github.com:jquery/jquery.git version=master accept_hostkey=True

由于knownhosts它不是核心 ansible 模块,因此您需要先安装它,有关如何安装它的更多信息,请参阅github repo 文档。


另一种解决方案是禁用 ssh 主机密钥检查,但这具有安全隐患,因此除非您真的知道自己在做什么,否则最好避免这种情况。

于 2014-03-03T16:02:06.110 回答
11

我基本上尝试了一切(接受密钥、ssh 配置更改、known_hosts 文件、ssh-agent 转发,忘了还有什么)没有成功。

在拔掉所有头发之后,我最终确定问题是SSH私钥可能需要密码!

我之前没有注意到这一点,因为本地 ssh 代理使用密钥环存储的密码来处理它,所以一切都在本地工作。在 Vagrant 虚拟机上使用 Ansible,此机制不可用,并且 git 模块卡住等待输入密码。一旦意识到可能的原因,我创建了一个没有密码的特殊密钥对(安全方面是已知的,对吗?)并将公钥添加到 bitbucket(/github /whichever)。当使用这个特殊的键时 - 事情进展顺利。

于 2015-11-16T17:04:40.090 回答
7

如果用户需要密码,如果没有提供密码,则 git 模块可能会挂起,而 git 可执行文件会在后台提示输入密码。对于您的 repo 参数,请尝试使用https://YAmikep:{yourpassword}@bitbucket.org/YAmikep/djangotutorial.git. 或者,尝试使用 git/ssh 密钥,这样不需要密码。

于 2013-11-22T14:26:57.973 回答
3

fwiw 我也有这显然是由多个 ssh 代理运行(osx 客户端)引起的。由固定

killall ssh-agent && eval `ssh-agent` && ssh-add -K

于 2014-01-22T07:01:39.633 回答
3

我遇到过这种情况,在我的情况下,git 挂断了为主机(bitbucket.org)确认新的 ssh 密钥。这可以通过sshknownhosts模块来解决,该模块在 git 之前运行以在主机上填充 .ssh/known_hosts,因此之后 git 不需要挂在它上面。

但要小心可能的安全问题,请阅读模块文档。

于 2013-11-30T22:22:12.263 回答
2

对我来说,问题是指定 git 的 https 路径而不是 ssh 路径。

https://gitlab.com/foo/bar.git # Incorrect
git@gitlab.com:foo/bar.git # Correct
于 2018-09-26T10:06:36.287 回答
0

在将 ansible 与 terraform 一起使用时,我遇到了类似的问题。Terraform 安全组不会像在 AWS 控制台中那样默认“允许所有出口”,因此无论客户端导致挂起行为如何,都不会发送 git clone 请求。

请在此处查看 terraform 文档中的注释:https ://www.terraform.io/docs/providers/aws/r/security_group.html#description-2

于 2018-11-03T14:41:11.650 回答