我正在尝试使用Vagrant和Ansible来创建开发人员VM环境。我能够连接好并安装包。我的问题似乎与ssh,git和keyfiles有关。不幸的是,我的设置相当复杂,我没有能力改变它。 git存储库托管在我必须通过带有密钥文件的堡垒主机连接的机器上。
我的本地ssh配置文件具有使其工作的所有必要代理命令。我有SSH转发我的密钥,因为我可以手动登录VM并使用git。通过Ansible它似乎不知道应该通过ssh配置文件设置的主机。
我没有将git克隆作为sudo运行,我使用的是accept_hostkey。它似乎根本不知道存储库主机。
我还尝试使用以下命令添加ansible.cfg:
ssh_args = -o ControlPersist=15m -F ssh.config -q
ssh.config文件与我的〜/ .ssh / config相同,在手动执行git克隆时恰好起作用。我也是手动做流浪者用户,我在我的剧本中将remote_user设置为vagrant。
我只是觉得这应该如何运作。
答案 0 :(得分:1)
如果我理解正确,你可以手动git clone进入你的流浪汉机器吗?
如果是,那么你可以这样做,因为你已经告诉我们这两台机器有完全相同的〜/ .ssh / config文件,那么你可以这样做,就像我在git clone中做的那样,我收到了错误:
- name: Pull sources from the repository.
git: repo='git@bitbucket.org:test/test.git' version=master dest=/var/www accept_hostkey=True force=yes recursive=no key_file=~/.ssh/id_rsa
有时,明确定义了key_file,accept_hostkey = True,force = yes解决问题。
另一方面,如果你想明确定义总是使用ssh连接而不是paramiko,那么你可以设置你的ansible.cfg文件,该文件位于/etc/ansible/ansible.cfg
[defaults]
transport=ssh
我在某处读过另一种技术,你也可以试着教你Ansible代表你和Git服务器交谈(这个改动再次在/etc/ansible/ansible.cfg中)
[ssh_connection]
ssh_args = -o ForwardAgent=yes
希望这会对你有所帮助。感谢
答案 1 :(得分:0)
我对Ansible不太熟悉,但是从文档来看,Ansible支持2个ssh transports:OpenSSH,Paramiko(Python的SSH)。 除非您手动选择使用哪一个,it might choose Paramiko而不是OpenSSH。
这可以解释您遇到的麻烦,因为ssh_args
是特定于OpenSSH的设置。
答案 2 :(得分:0)
所以问题结果是我实际上是以root身份运行我的一个git克隆。
要在这种情况下正确转发SSH密钥,您必须编辑/ etc / sudoers(使用visudo)并更新env_keep以便保留SSH_AUTH_SOCK。