【问题标题】:GIT over SSH in Ansible hangs, eventhough ssh-agent forwarding is set upAnsible 中基于 SSH 的 GIT 挂起,即使设置了 ssh-agent 转发
【发布时间】:2014-02-21 01:10:51
【问题描述】:

我已经设置了所有我能找到的东西,但仍然从 GitHub 克隆一个 repo 会挂起配置过程。

我有:

  • known_hosts 中的服务器
  • .ssh/配置

    Host github.com
      ForwardAgent yes
      StrictHostKeyChecking no
    
  • 复制的私钥

  • 公钥在authorized_keys中
  • 命令以vagrant用户身份运行
  • 剧情是:

    - name: Checkout from git
      git: repo=git@github.com:username/repositoryname.git dest=/srv/website
    

【问题讨论】:

  • 确保您没有使用sudo 运行此任务,因为它会中断代理转发。
  • @techtonik 即使为 root 用户设置了转发?
  • @cvsguimaraes 转发是从您的ssh-agent 端口到远程SSH 端口的链,除非您解决此问题,否则通过sudo 会破坏此链。见stackoverflow.com/a/24134109/239247

标签: git ssh timeout ansible ssh-agent


【解决方案1】:

只是为了扩展tillda 的答案,该配置可以放在您的剧本旁边的 ansible.cfg 文件中。例如:

ansible.cfg

[defaults]
transport = ssh

[ssh_connection]
ssh_args = -o ForwardAgent=yes

我想说这样做比设置为 env 变量更好,因为将它放在 conf 文件中既更具声明性,也可以最大限度地减少您可能与之合作的其他人进行项目所需的步骤.

会议文档: http://docs.ansible.com/intro_configuration.html#the-ansible-configuration-file

示例配置文件: https://raw.github.com/ansible/ansible/devel/examples/ansible.cfg

【讨论】:

  • 我同意。谢谢你。
【解决方案2】:

我想分享对我有用的答案:

https://groups.google.com/forum/#!msg/ansible-project/u6o-sWynMjo/69UwJfJPq7cJ - 来自 Ansible Google 组

对于 ansible,ssh-add 以首先在您的主机中加载 ssh 密钥。 然后使用“ssh”作为连接类型并启用转发。

如:

$ ssh-add  
$ export ANSIBLE_TRANSPORT="ssh"  
$ export  ANSIBLE_SSH_ARGS="-o ForwardAgent=yes"

请参阅 ssh-add 手册以运行代理。

ssh-args 的 Ansible 文档是 http://docs.ansible.com/intro_configuration.html#ssh-args

【讨论】:

    【解决方案3】:

    这对我有用

    - name: ensure known hosts
      shell: touch ~/.ssh/known_hosts
    - name: remove github.com from known host
      shell: ssh-keygen -R github.com
      # >> instead of > to keep existing known_hosts file
    - name: ensure github.com in known host
      shell: ssh-keyscan -H github.com >> ~/.ssh/known_hosts
    

    【讨论】:

    【解决方案4】:

    在 ansible.cfg 中添加以下参数:

    [defaults]
    sudo_flags=-HE
    

    【讨论】:

      【解决方案5】:

      在我的情况下,问题是存储库字符串。我有一个 bitbucket 私有存储库设置为:

      git@tsrs...

      但应该是:

      ssh://git@tsrs...

      请注意前缀“ssh”的细微缺失。奇怪的是,如果我克隆一个没有“ssh”的 github 存储库,它就可以正常工作!

      【讨论】:

        【解决方案6】:

        我有一个错误:

        bitbucket.org 有一个未知的主机密钥。将 accept_hostkey 设置为 True 或在运行 git 模块之前手动添加主机密钥

        我必须在我的 git 模块命令中添加一个 accept_hostkey 参数:

        剧本:

        tasks:
            - name: clone
              git: repo=git@bitbucket.org:robusta-code/xyz.git
                   dest=/app
                   accept_hostkey=yes
        

        ansible.cfg

        [ssh_connection]
        ssh_args = -o ForwardAgent=yes
        

        【讨论】:

          猜你喜欢
          • 2018-04-19
          • 2019-07-06
          • 1970-01-01
          • 1970-01-01
          • 2017-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-10
          相关资源
          最近更新 更多