Vagrant 流浪、易受攻击和SSH转发

Vagrant 流浪、易受攻击和SSH转发,vagrant,ansible,Vagrant,Ansible,我试图使用Vagrant和Ansible创建一个开发者虚拟机环境。我能够很好地连接并安装软件包。我的问题似乎是ssh、git和密钥文件。不幸的是,我的设置相当复杂,我没有能力改变这一点。git存储库托管在一台机器上,我必须通过带有密钥文件的bastion主机连接到该机器 我的本地ssh配置文件中包含了所有必要的代理命令,可以实现这一点。我让SSH转发我的密钥,因为我可以手动登录VM并使用git。通过Ansible,它似乎不知道应该通过ssh配置文件设置哪些主机 我不是以sudo的身份运行git克

我试图使用Vagrant和Ansible创建一个开发者虚拟机环境。我能够很好地连接并安装软件包。我的问题似乎是ssh、git和密钥文件。不幸的是,我的设置相当复杂,我没有能力改变这一点。git存储库托管在一台机器上,我必须通过带有密钥文件的bastion主机连接到该机器

我的本地ssh配置文件中包含了所有必要的代理命令,可以实现这一点。我让SSH转发我的密钥,因为我可以手动登录VM并使用git。通过Ansible,它似乎不知道应该通过ssh配置文件设置哪些主机

我不是以sudo的身份运行git克隆,而是使用accept_hostkey。它似乎根本不了解存储库主机

我还尝试使用以下命令添加ansible.cfg:

ssh_args = -o ControlPersist=15m -F ssh.config -q
ssh.config文件与我的~/.ssh/config文件相同,在手动执行git克隆时,它恰好起作用。我也是作为流浪者用户手动执行此操作的,并且在我的剧本中将remote_user设置为流浪者


我只是有点困惑于这应该如何工作。

我对Ansible不太熟悉,但从文档中可以看出,Ansible支持2种ssh:OpenSSH,Paramiko(Python的ssh)。 除非您手动选择使用哪一个,否则使用Paramiko而不是OpenSSH


这可以解释您遇到的问题,因为
ssh\u args
是OpenSSH特定的设置。

如果我理解正确,您可以手动将git克隆到您的流浪机器中吗

如果是,那么您可以这样做,因为您已经告诉我们,这两台机器都有完全相同的~/.ssh/config文件,然后您可以这样做,就像我在git克隆过程中遇到错误时所做的那样:

- 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
有时,显式定义密钥文件,accept\u hostkey=True和force=yes解决问题

另一方面,如果希望显式定义始终使用ssh连接而不是paramiko,则可以将其设置到ansible.cfg文件中,该文件位于/etc/ansible/ansible.cfg

[defaults]
transport=ssh
[ssh_connection]
ssh_args = -o ForwardAgent=yes
还有另一种技巧我在哪里读过,你也可以试着教Ansible代表你和Git服务器对话(同样,这个更改在/etc/Ansible/Ansible.cfg中)


希望这对你有帮助。谢谢

所以问题是我实际上是在以root身份运行我的一个git克隆

在这种情况下,要正确转发SSH密钥,必须编辑/etc/sudoers(使用visudo)并更新env_keep,以便保留SSH_AUTH_SOCK