Ansible: wie klont ein repository als andere user
Ich bin versucht, zu schreiben Bereitstellungen Regeln mit Ansible. Einige der Schritte sind:
- Update-und Upgrade-Server
- Erstellen Sie einen Benutzer mit dem Namen harry
- Hinzufügen Öffentliche und Private Schlüssel zu harry
- Clone a Git Repository aus bitbucket.org
Möchte ich Klonen Sie das repository wie harry
Benutzer in seinem home-Verzeichnis (das ist, warum ich bin kopieren Sie den öffentlichen und den privaten Schlüssel). Das Problem ist, dass es nicht möglich ist, zum angeben eines Benutzers der git clone muss ausgeführt werden. So Ansible versuchen zu Klonen Sie das repository als root an und scheiterte, weil er nicht über die Rechte zum Zugriff auf das repository.
Wie lösen Sie diese ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als pro Ansible-Dokumentation Privilege-Escalation, Ansible Einschränkungen auf immer ein nicht berechtigter Benutzer, wie es entlarvt eine Sicherheitslücke zu Harry.
Mithilfe der Ansible git Modul können Sie festlegen, verwenden Sie Harry ' s private key von der privilegierten Ansible-Benutzer über die
key_file
parameter, und mitbecome_user
ermöglicht die geklonten Dateien zu gegeben werden, das Eigentum an Harry. Zum Beispiel:become: yes
ist wichtig, denn wenn du root bist, dann wird das geklonte Verzeichnis wird root als gut, auch wenn Siebecome_user: harry
Können Sie einen Benutzer angeben, der für jede Aufgabe in Ihrem playbook:
Weitere details siehe Ansible Privilege-Escalation.
Eine sicherere alternative zu der Platzierung Ihres private key auf einem remote-server ist das aktivieren von ssh-key-Weiterleitung in der sshd-config auf dem server und dem ssh-config lokal. Der Schlüssel verlässt nie Ihren lokalen box.
harry
Berechtigungen für den Zugriff auf die socket-Datei. serverfault.com/questions/107187/...ja, können Sie machen Sie die Arbeit mit ssh forwarding
solange die Benutzer, dass Sie sich in der git-clone ist Teil der sudoers, er braucht also nicht zu verwenden sudo ausführen git
So, zusätzlich zu all den configs erforderlich für die Schlüssel weiterleiten, gibt es einen trick, dass auch in Ansible docs.
High-level-Prozess ist wie folgt:
aktivieren Sie agent-forwarding in die Steuerung der Maschine
aktivieren Sie die Annahme-agent-key in der Ziel-Maschine
erstellen Sie einen Benutzer und fügen Sie ihn (oder Sie:) in die sudoers Gruppe
verwenden ansible ' s git-Modul zu Klonen, die repo geworden: Ihre-sudoer-user
Auch, zu vermeiden, werden alle Berechtigungen verweigert auf dem host, nur Klonen, es in ~/etwas
Sie können immer kopieren, oder symlink, um überall Sie wollen
hier ist der link, wo das playbook-Teil hinzufügen Benutzer sudoers gezeigt wird, es ist im Grunde ein copy-paste: Ansible: erstellen Sie einen Benutzer mit sudo-Berechtigungen
funktioniert wie ein Charme
Also, stellen Sie sicher, fügen Sie Ihren öffentlichen SSH-Schlüssel in die Allgemeinen Einstellungen von BitBucket, nicht in die pro Projekt. Ansonsten dein ssh-key funktioniert nur auf einem speziellen repo. Aber wenn Sie fügen Sie die ssh-Schlüssel in das bitbucket Allgemeine Einstellungen, es funktioniert auf allen repos
unten ist der code, dass macht es Arbeit, die suduer Benutzer "deployer"
# Extra "hack" so ändern Sie Berechtigungen auf Dateien UND Ordnern in einem Durchgang, es hat zu tun mit dem Kapital X und wofür Sie gilt und was nicht. Auch abgeholt von einem anderen stackoverflow
Ja mit ssh forwarding funktioniert es.
Wenn Sie Ihr playbook hat "geworden: yes" aktiviert, Global, stellen Sie sicher, dass Sie diese Funktion deaktivieren, für die git-Aufgabe.
Der Grund dafür, dass es nicht funktioniert, wenn du "geworden ist: ja", ist da root privilege escalation zerstört ssh-forwarding.
Ich glaube nicht, dass Sie brauchen, um sich ein sudoer. Denn wenn Ihr Ansible Steuerung der Maschine authentifiziert, mit Bitbucket mit ssh-Schlüssel (den Sie hinzufügen ssh key zu dem repo-Geschäft), dann ist diese Authentifizierung Durchlaufen ssh-forwarding.
Sie können es testen, indem Sie ssh in Ihrem Ziel und die Ausstellung "ssh -T [email protected]" Sie sehen in der Ausgabe, dass das Ziel angenommen, die von Bitbucket als Nutzer des Ansible-controlling-Maschine. So einfach führen Sie die Aufgabe, die explizit mit "geworden:" Nein".
Ich bin über das Klonen in ~/etwas auf dem Ziel. Sonst wird es Probleme mit Berechtigungen.
[Edit: eine weitere Sache, um zu machen es zu arbeiten - enthalten ⁃ Repo-URL sollten Sie die ssh eine nicht https, ohne ssh://(trotz allem, was geschrieben steht in dem Ansible Handbuch Beispiele)]
So weit wie die Sicherheit, wie oben erwähnt, ssh-forwarding ist der beste.