【问题标题】:Vagrant, Ansible, and SSH forwardingVagrant、Ansible 和 SSH 转发
【发布时间】:2015-01-09 22:24:36
【问题描述】:

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

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

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

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

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

ssh.config 文件与我的 ~/.ssh/config 相同,它在手动执行 git 克隆时恰好可以工作。我也以 vagrant 用户的身份手动执行此操作,并且在我的剧本中将 remote_user 设置为 vagrant。

我只是对它应该如何工作感到困惑。

【问题讨论】:

    标签: vagrant ansible


    【解决方案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
    

    希望这会对您有所帮助。谢谢

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-14
          • 2016-05-21
          • 1970-01-01
          • 2012-08-10
          • 2013-10-12
          相关资源
          最近更新 更多