Repo不会使用git模块

时间:2017-07-25 15:26:09

标签: ansible

我看过类似的问题,但还没找到答案。

我可以通过SSH连接到服务器(Ubuntu 16.04)并手动克隆我的git repo。这让我相信它不是SSHForwardAgent问题。

错误非常典型:

"Cloning into bare repository '/home/deploy/apps/MYPROJECT/production/cached-copy'...", 
"Permission denied (publickey).", 
"fatal: Could not read from remote repository.",

ansible.cnf:

[ssh_connection]
ssh_args = -o ForwardAgent=yes

角色如下所示:

- name: Update the bare Git repository
  become_user: "{{ deploy_user }}"
  git:
    repo: "git@github.com:MYUSER/MYPROJECT.git"
    dest: "{{ deploy_to }}/cached-copy"
    version: "{{ branch }}"
    bare: yes
    update: yes
    accept_hostkey: yes
    ssh_opts: "-o StrictHostKeyChecking=no -o ForwardAgent=yes"

Ansible的详细输出是:

"changed": false, 
"cmd": "/usr/bin/git clone --bare '' /home/deploy/apps/MYPROJECT/production/cached-copy", 
"failed": true, 
"invocation": {
"module_args": {
"accept_hostkey": true, 
"bare": true, 
"clone": true, 
"depth": null, 
"dest": "/home/deploy/apps/MYPROJECT/production/cached-copy", 
"executable": null, 
"force": false, 
"key_file": null, 
"recursive": true, 
"reference": null, 
"refspec": null, 
"remote": "origin", 
"repo": "git@github.com:MYUSER/MYPROJECT.git", 
"ssh_opts": "-o StrictHostKeyChecking=no -o ForwardAgent=yes", 
"track_submodules": false, 
"umask": null, 
"update": true, 
"verify_commit": false, 
"version": "master"

MYUSER和MYPROJECT的使用是收回此类信息。

有一件事看起来很可疑cmd它不包含repo网址,这是正常的吗?

如果我将-o ForwardAgent=yes更改为-A,我会收到其他错误:Timeout (12s) waiting for privilege escalation prompt

我也知道AgentForward正在工作,因为如果我进入服务器并执行ssh -T git@github.com我得到预期的“你已经成功通过身份验证,但GitHub不提供shell访问权限。”。

请注意我不想在服务器上安装私钥。

更新:以下是详细输出的要点:https://gist.github.com/krisleech/8bfbf817c237258a672b3b3393fea8dd

另一方面,这似乎工作正常:

- name: "Test github"
  command: ssh -T git@github.com

2 个答案:

答案 0 :(得分:4)

从详细输出中我看到:

  • 首先,您使用admin用户和ForwardAgent=yes
  • ssh到远程框
  • 然后,你以deploy的身份运行Ansible任务(git模块)

这是我在评论中描述的场景,在执行sudo(使用常规设置)时,您可以有效地禁用ssh代理访问。

要使这项工作正常,您需要直接与deploy用户进行ssh(而不是使用admin->deploy),或者在目标框中设置sudo以允许保留环境变量,请参阅this answer了解详情。

  

Defaults env_keep+=SSH_AUTH_SOCK添加到sudoers

答案 1 :(得分:0)

缺少repo参数的协议。来自ansible-doc

# Example git checkout from Ansible Playbooks
  - git:
     repo: git://foosball.example.org/path/to/repo.git
     dest: /srv/checkout

尝试将git:ssh:添加到repo参数。