ansible: Git-Modul hängt

Lesezeit: 7 Minuten

Ich verwende Ansible und es fällt mir schwer, das Git-Modul zum Laufen zu bringen. Ich habe mehrere Beiträge von Leuten gelesen, die das gleiche Problem haben, ich habe mir das Ansible-Dokument angesehen, nun, ich habe fast alles versucht. Ich habe ein klares Tutorial gefunden, dem ich gefolgt bin, bis sie Git verwenden, aber ich habe wieder ein Problem, wenn ich mein Repository verwende … :/ Die Git-Task hängt einfach … kein Fehler, es ist nur hängen geblieben!

Hier ist meine Host-Datei:

[web]
dev1 ansible_ssh_host=10.0.0.101 ansible_ssh_user=root

Dies ist eine vagabundierende VM, die auf Virtualbox auf meinem Computer ausgeführt wird.

Ich habe das Playbook aus diesem Tutorial genommen und alle Schritte bis Schritt 08 ausgeführt: https://github.com/leucos/ansible-tuto/tree/master/step-08

Ich führe es auf meiner VM aus, es funktioniert gut, dann füge ich eine Aufgabe „Bereitstellen meines Codes“ hinzu, um mein Repository zu verwenden … aber diese Aufgabe funktioniert nicht. Es ist ein privates Repository auf Bitbucket. Macht es einen Unterschied?

- hosts: web
  tasks:

    - name: Deploy our awesome application
      action: git repo=https://github.com/leucos/ansible-tuto-demosite.git dest=/var/www/awesome-app
      tags: deploy

    - name: Deploy my code
      action: git repo=https://[email protected]/YAmikep/djangotutorial.git dest=/var/www/my-app
      tags: deploy

Es könnte etwas mit dem Benutzer oder dem Benutzer sein, der Ansible ausführt, oder den Schlüsseln usw., aber ich habe es stundenlang hin und her versucht und bin jetzt noch verwirrter … Ich weiß einfach nicht, was ich tun soll, um das jetzt zu debuggen und finde heraus, was falsch ist und was mir fehlt.

Vielen Dank.

  • Ich würde persönlich nicht empfehlen, HTTPS für den Zugriff auf Git-Repos zu verwenden, es sei denn, Sie befinden sich hinter einer sehr strengen Firewall (ohne 22 ausgehend, ja). Dies könnte Probleme beim Pushen großer Commits verursachen, dies könnte stark von den HTTP-Proxy-Einstellungen abhängen, und natürlich speichert es Ihr eigenes Passwort im Klartext direkt neben Ihrem Repo. Private ssh-Schlüssel, die für gerade genügend Zeiträume von Agenten an entfernte Hosts weitergeleitet werden, sind vorzuziehen.

    – Raumtaucher

    30. November 2013 um 22:27 Uhr

  • Als allgemeine Anmerkung. Die Syntax https://github.com/account/repo-name.git wird nicht funktionieren mit einem Bereitstellungsschlüssel in einer Ansible-Aufgabe. Allerdings die Syntax g[email protected]:account/repo-name.git wird funktionieren in einer Ansible-Aufgabe mit einem gültigen Bereitstellungsschlüssel. Die Syntax ist subtil, aber wichtig zu beachten.

    – avelis

    5. Januar 2015 um 19:54 Uhr


  • @avelis dein Kommentar hat mir heute geholfen. änderte die URL von https zu git

    – sankargorthi

    13. Juli 2016 um 6:30 Uhr

Es gibt ein paar Gründe, warum das Git-Modul hängen bleiben könnte, aber der wahrscheinlichste ist, dass die git clone Der Befehl wartet auf eine Bestätigung, ob der Hostschlüssel zu den bekannten Hosts Ihres Servers hinzugefügt werden soll. Um zu überprüfen, ob dies das Problem ist, führen Sie Ansible mit dem Flag aus: --verbosedamit es im ausführlichen Modus ausgeführt wird, erhalten Sie weitere Informationen über den Fehler.

Wenn Sie bestätigen, dass die bekannten Hosts das Problem sind, haben Sie zwei Möglichkeiten:

Lösung 1:

Um dieses Problem mit dem zu vermeiden git Modul verwenden accept_hostkey Parameter.

- name: ensure jquery repo is available
  git: [email protected]:jquery/jquery.git version=master accept_hostkey=True

Lösung 2:

Verwenden Sie die ansible-sshknownhosts Drittanbietermodul, bevor Sie den Kern verwenden git Modul:

- name: ensure github is a known host
  action: sshknownhosts host=github.com state=present 

- name: ensure jquery repo is available
  git: [email protected]:jquery/jquery.git version=master accept_hostkey=True

Seit der knownhosts kein Ansible-Kernmodul ist, müssen Sie es zuerst installieren github repo docs für weitere Informationen, wie man es installiert.


Eine andere Lösung wäre, die Überprüfung des ssh-Hostschlüssels zu deaktivieren, aber dies hat Auswirkungen auf die Sicherheit. Wenn Sie also nicht wirklich wissen, was Sie tun, ist es am besten, dies zu vermeiden.

  • Könnte sollte action: sshknownhosts geschrieben werden als sshknowhosts: host= ...?

    – Küken

    3. Februar 2015 um 6:50 Uhr

  • accept_hostkey Flag würde bei mir nicht funktionieren. Ich fügte hinzu -o StrictHostKeyChecking=no zu ssh_opts und das hat funktioniert.

    – Chishaku

    19. Dezember 2015 um 22:55 Uhr

  • @Marcos Abreu Sie haben erwähnt, dass das Deaktivieren der Überprüfung des SSH-Hostschlüssels Auswirkungen auf die Sicherheit hat. Aber ist es nicht genau das accept_hostkey=Wahr funktioniert in deiner Lösung 1? Hinweis

    – Sriman

    11. August um 9:56 Uhr


Ich habe im Grunde alles versucht (Schlüssel akzeptieren, SSH-Konfigurationsänderung, Known_Hosts-Datei, SSH-Agent-Weiterleitung und was sonst noch vergessen), ohne Erfolg.

Nachdem ich mir alle Haare ausgerissen hatte, stellte ich schließlich fest, dass das Problem eine Tatsache war, dass SSH Privat Schlüssel kann eine Passphrase erfordern!

Ich habe das früher nicht bemerkt, weil der lokale SSH-Agent sich darum gekümmert hat, indem er eine im Schlüsselbund gespeicherte Passphrase verwendet hat, sodass alles lokal funktionierte. Bei Verwendung von Ansible auf einer Vagrant Virtual Machine war dieser Mechanismus nicht verfügbar und das Git-Modul blieb beim Warten auf die Eingabe der Passphrase hängen. Nachdem ich die mögliche Ursache erkannt hatte, erstellte ich ein spezielles Schlüsselpaar ohne Passphrase (Sicherheitsaspekte sind bekannt, oder?) und fügte den öffentlichen Schlüssel zu Bitbucket (/github /whichever) hinzu. Bei Verwendung dieses speziellen Schlüssels verlief alles reibungslos.

  • Das ist ein Lebensretter!

    – körperliche Anziehung

    12. April 2017 um 18:52 Uhr

  • Genau das ^ (das hat mir viel Zeit gespart)

    –Benz

    26. Juni 2017 um 18:13 Uhr

  • Wie erstellt man einen psswordlosen Schlüssel? Ich habe versucht, ein leeres Passwort zu verwenden, aber es hängt immer noch (wahrscheinlich nur darauf wartend, dass jemand die Eingabetaste drückt).

    – Laurynas Mališauskas

    11. Juli 2017 um 15:35 Uhr

  • $ ssh-keygen und RETURN drücken, wenn Sie gefragt werden “Passphrase eingeben (leer für keine Passphrase):”, aber es gibt andere Möglichkeiten, die ähnliche Symptome verursachen können. Probieren Sie die anderen vorgeschlagenen Optionen aus.

    – Silberdr

    12. Juli 2017 um 16:07 Uhr


Wenn der Benutzer ein Passwort benötigt, kann das Git-Modul hängen bleiben, wenn keins bereitgestellt wird, während die ausführbare Git-Datei im Hintergrund dazu auffordert. Versuchen Sie es für Ihren Repo-Parameter mit https://YAmikep:{yourpassword}@bitbucket.org/YAmikep/djangotutorial.git. Oder versuchen Sie stattdessen, git/ssh-Schlüssel zu verwenden, damit kein Passwort erforderlich ist.

  • Ich verwende die SSH-Schlüssel und den SSH-Agenten, aber ich versuche, diesem Tutorial zu folgen: stavros.io/posts/example-provisioning-and-deployment-ansible anb es funktioniert nicht mit dem speziell erstellten Benutzer … Ich könnte git zum Laufen bringen, aber nicht mit dem für das Projekt erstellten Benutzer.

    – Michael

    23. November 2013 um 3:57 Uhr


  • @YAmikep – Hast du es mit der Repo-Adresse von versucht [email protected]:YAmikep/djangotutorial.git? Das oben angegebene Beispiel verwendet das HTTPS-Protokoll, wodurch Bitbucket zur Eingabe eines Passworts zur Authentifizierung auffordert, anstatt Schlüssel zu verwenden. Das von Github funktioniert gut, da es sich um ein öffentliches Repo handelt, aber Bitbucket erfordert Anmeldeinformationen für YAmikep.

    – Jake Kreider

    23. November 2013 um 15:12 Uhr

  • Es gibt mir Authentifizierung fehlgeschlagen, obwohl der Benutzername und das Passwort korrekt sind, haben Sie eine Idee warum?

    – Alfonso Embid-Desmet

    28. Mai 2015 um 10:47 Uhr

Ich bin darauf gestoßen, und in meinem Fall hat Git aufgelegt, um einen neuen SSH-Schlüssel für einen Host (bitbucket.org) zu bestätigen. Dies könnte durch gelöst werden sshknownhosts -Modul, das vor git ausgeführt wird, um .ssh/known_hosts auf dem Host zu füllen, sodass git danach nicht daran hängen muss.

Aber seien Sie vorsichtig mit möglichen Sicherheitsproblemen, lesen Sie die Moduldokumentation.

fwiw Ich hatte dies auch, anscheinend verursacht durch mehrere laufende SSH-Agenten (OSX-Client). Behoben von

killall ssh-agent && eval `ssh-agent` && ssh-add -K

Benutzer-Avatar
gemein393

Für mich bestand das Problem darin, den https-Pfad zu git anstelle des ssh-Pfads anzugeben.

https://gitlab.com/foo/bar.git # Incorrect
[email protected]:foo/bar.git # Correct

Benutzer-Avatar
liamconnell

Ich hatte ein ähnliches Problem bei der Verwendung von Ansible mit Terraform. Terraform-Sicherheitsgruppen erlauben nicht standardmäßig „alle ausgehenden Datenverkehr“, wie sie es in der AWS-Konsole tun, sodass die Git-Clone-Anfrage nicht gesendet wird, unabhängig davon, welcher Client das hängende Verhalten verursacht.

Siehe den Hinweis in den Terraform-Dokumenten hier: https://www.terraform.io/docs/providers/aws/r/security_group.html#description-2

1205830cookie-checkansible: Git-Modul hängt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy