2014-01-29 8 views
31

Ich habe alles eingerichtet, was ich finden konnte, aber klonen immer noch ein Repo von GitHub hängt den Bereitstellungsprozess.GIT über SSH in Ansible hängt, obwohl ssh-Agent-Weiterleitung eingerichtet ist

ich habe:

  • Server in known_hosts
  • .ssh/config

    Host github.com 
        ForwardAgent yes 
        StrictHostKeyChecking no 
    
  • kopiert privaten Schlüssel

  • öffentlichen Schlüssel in authorized_keys ist
  • der Befehl ausgeführt wird als vagrant Benutzer
  • das Spiel ist:

    - name: Checkout from git 
        git: [email protected]:username/repositoryname.git dest=/srv/website 
    
+6

Stellen Sie sicher, dass Sie diese Aufgabe nicht mit 'sudo' ausführen, da dadurch die Agentweiterleitung unterbrochen wird. –

+0

@techtonik auch wenn die Weiterleitung für den root-Benutzer festgelegt ist? – cvsguimaraes

+0

@cvsguimaraes Die Weiterleitung ist eine Kette von Ihrem 'ssh-Agenten'-Port zum entfernten SSH-Port, und das Durchlaufen von' sudo' bricht diese Kette, es sei denn, Sie umgehen dies. Siehe http://StackOverflow.com/A/24134109/239247 –

Antwort

14

Ich möchte die Antwort teilen, die für mich gearbeitet:

https://groups.google.com/forum/#!msg/ansible-project/u6o-sWynMjo/69UwJfJPq7cJ - Von ansible Google-Gruppe

Für ansible, ssh-add, um zuerst ssh-Schlüssel in Ihrem Host-Rechner zu laden. Verwenden Sie dann "ssh" als Verbindungstyp mit aktivierter Weiterleitung.

wie:

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

Siehe Handbuch für ssh-add der Agenten für den Betrieb.

Die ansible docs für ssh-args ist http://docs.ansible.com/intro_configuration.html#ssh-args

7

das für mich

- 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 
+14

keine Notwendigkeit, da git Ansible-Modul hat eine Flagge accept_hostkey, um es sicherzustellen. Schalten Sie es einfach ein. – kaji

+1

Ein Modul für Ansible zur Pflege der Datei/etc/ssh/ssh_known_hosts https://github.com/bfmartin/ansible-sshknownhosts – jitter

60

gerade arbeitet auf tillda Antwort zu erweitern, kann diese Konfiguration in einer Datei ansible.cfg neben Ihrem Textbuch platziert werden. zB:

ansible.cfg

[defaults] 
transport = ssh 

[ssh_connection] 
ssh_args = -o ForwardAgent=yes 

Ich würde sagen, es ist besser, das zu tun, als als env Variable gesetzt, wie es in einer conf Datei Platzierung ist sowohl deklarative und wird auch minimiert die Schritte, die für andere Leute notwendig sind, mit denen Sie arbeiten, um mit einem Projekt zu gehen.

Conf docs: http://docs.ansible.com/intro_configuration.html#the-ansible-configuration-file

Beispiel Konfigurationsdatei: https://raw.github.com/ansible/ansible/devel/examples/ansible.cfg

+0

Ich stimme zu. Danke dafür. –

+0

das funktionierte für mich. Vielen Dank! – bcherny

+1

funktioniert nicht für mich immer noch fest – holms

0

Ich hatte einen Fehler:

bitbucket.org hat eine unbekannte hostkey.Stellen Sie accept_hostkey auf True oder manuell den hostkey hinzufügen vor dem Ausführen des git Modul

ich einen accept_hostkey Parameter zu meinem git Modul Befehl hinzufügen musste:

Textbuch:

tasks: 
    - name: clone 
     git: [email protected]:robusta-code/xyz.git 
      dest=/app 
      accept_hostkey=yes 

ansible. cfg

[ssh_connection] 
ssh_args = -o ForwardAgent=yes 
1

Fügen Sie zu ansible.cfg den folgenden Parameter hinzu:

[defaults] 
sudo_flags=-HE 
1

In meinem Fall war das Problem die Repository-Zeichenfolge. Ich hatte ein bitbucket privaten Repository gesetzt, wie:

git @ TSRs ...

aber es sollte sein:

ssh: // git @ TSRs ...

Beachten Sie die subtile Abwesenheit des Präfixes "ssh". Der seltsame Teil ist, dass wenn ich ein Github-Repository ohne "ssh" klone, es gut funktioniert!