2015-01-09 49 views
2

我正在尝试使用Vagrant和Ansible创建开发人员VM环境。我能够很好地连接并安装软件包。我的问题似乎与ssh,git和密钥文件。我的设置很不幸很复杂,我没有能力去改变它。 git存储库托管在一台机器上,我必须通过堡垒主机连接到一个密钥文件。Vagrant,Ansible和SSH转发

我的本地SSH配置文件具有所有必要的代理命令,使这项工作。我有SSH转发密钥,因为我可以手动登录到VM并使用git。通过Ansible,它似乎并不知道应该通过ssh配置文件设置的主机。

我没有运行gdo clone作为sudo,而我正在使用accept_hostkey。它似乎根本不知道存储库主机。

我也尝试添加ansible.cfg用下面的命令:

ssh_args = -o ControlPersist=15m -F ssh.config -q 

的ssh.config文件是一样的我的〜/ .ssh/config中做混帐克隆这种情况发生时工作手动。我也是这样做的手动作为流浪用户,并且我的遥控器设置为在我的手册中无效。

我只是有点难以理解这应该如何工作。

回答

0

我不太熟悉Ansible,但是从文档来看,Ansible支持2 ssh transports:OpenSSH,Paramiko(Python的SSH)。 除非你手动选择使用哪一个,it might choose Paramiko而不是OpenSSH。

这可以解释您遇到的麻烦,因为ssh_args是OpenSSH的特定设置。

1

如果我理解正确,你可以手动将它克隆到你的流浪机器中?

如果是,那么你可以这样做,因为你已经告诉我们这两台机器有完全相同的〜/ .ssh/config文件,那么你可以这样做,这是我在git clone期间做的,当我到了错误:

- name: Pull sources from the repository. 
    git: repo='[email protected]: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和力= 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 

希望这会帮助你。谢谢

0

所以问题原来是我实际上运行我的一个git克隆作为根。

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