Automatisieren Sie die Verwendung des lokalen SSH-Schlüssels für die Git-Bereitstellung mit Ansible

Lesezeit: 4 Minuten

Benutzer-Avatar
oskargicast

Ich arbeite mit vagrant und ansible. Ich möchte die automatisieren Einsatz Rolle von ansible (Sie können mein Repo hier überprüfen). Zu diesem Zweck versuche ich, meinen lokalen SSH-Schlüssel in meinem VPS und meinem vagabundierenden Gastcomputer bereitzustellen (ich versuche die SSH-Agentenweiterleitung).

TOR

Automatisieren Sie den Bereitstellungsprozess mit Git mit Ansible. Das habe ich schon gemacht:

---

- name: read-write git checkout from github
  git: repo={{ repository }} dest=/home/site

Wo:

---
# Variables here are applicable to all host groups

repository: [email protected]:dgnest/dgnest.git

PROBLEM

Wenn ich das mache: “Vagrant Provision”, stoppt die Konsole hier:

TASK: [deployment | read-write git checkout from github] ********************** 

Das liegt daran, dass ich die ssh-Schlüssel nicht eingerichtet habe.

ICH HABE ES VERSUCHT

Ich möchte die verwenden Schlüsseldatei Option, die das Git-Modul von Ansible hat. Aber es scheitert auch.

---                                                                             

- name: read-write git checkout from github                                     
  git: repo={{ repository }} dest=/home/site key_file=/home/oscar/.ssh/id_rsa.pub

Eine andere Möglichkeit ist das Kopieren von my ~/ssh/id_rsa.pub in jeden VPS und Landstreicher, aber mein Problem in diesem Fall ist, mit all den verschiedenen Benutzern umzugehen. Vagrant verwendet den Benutzer “vagrant” und mein VPS verwendet einen anderen, also musste ich meinen lokalen SSH-Schlüssel in jeden dieser Benutzer einfügen?

Hoffe ihr könnt mir helfen. Vielen Dank.

AKTUALISIEREN:

Ich habe gerade die @leucos-Antwort automatisiert (Danke). Kopieren der privaten und öffentlichen RSA-Schlüssel. Ich teile dieser Link mit der Umsetzung.

  • Das Kopieren privater RSA-Schlüssel ist eine wirklich schlechte Idee. Das Teilen privater Schlüssel ist eine wirklich schlechte Idee. Vertrauen Sie beispielsweise Ihren Teamkollegen (und allen anderen Mitarbeitern, die Zugriff auf den Remote-Server haben), dass Sie mit ihnen den Zugriff auf Ihre privaten Repositories teilen? Wenn nein – behalten Sie Ihren privaten Schlüssel Privatgelände.

    – Igor Pomaranskiy

    23. März 2016 um 12:52 Uhr

Du nicht müssen Sie Ihren lokalen SSH-Schlüssel auf Remote-Server kopieren. Stattdessen erstellen Sie einfach eine Datei mit dem Namen ansible.cfg in dem Verzeichnis, in dem Sie Bereitstellungsskripts ausführen, und legen Sie die nächsten Einstellungen fest:

[ssh_connection]
ssh_args = -o ForwardAgent=yes

Das war’s, jetzt wird Ihre lokale Identität an die Remote-Server weitergeleitet, die Sie mit Ansible verwalten.

  • Vielen Dank für diese Lösung. Aber in meiner Praxis müssen Sie den Server auf Root einrichten und mit einem anderen Benutzer bereitstellen. SSH-Forwarding funktioniert nur mit Benutzern, die über ssh verbunden sind. Wenn Sie es mit anderen No-Root-Benutzern verwenden möchten, sollten Sie Ihr Ansible-Playbook aufteilen, eines, das Sie per Root verbinden und alle installieren, das andere, das Sie bereitstellen, andere Benutzer kaufen. In dieser Konfiguration können Sie mit einem normalen Benutzer ohne SSH-Schlüssel aus einem privaten Repo bereitstellen. Arbeiten Sie wie am Schnürchen mit Django + Ansible.

    – Denis Savenko

    7. Februar 2017 um 6:25 Uhr

  • Die SSH-Agentenweiterleitung ist unsicher und wenn Ihr Remote-Server kompromittiert ist, könnte ein Angreifer ihn möglicherweise verwenden, um auf Server zuzugreifen, die ihm die Schlüssel des Agenten ermöglichen. Aus man ssh auf der -A Option: „Die Agentenweiterleitung sollte mit Vorsicht aktiviert werden. Benutzer mit der Fähigkeit, Dateiberechtigungen auf dem Remote-Host (für den UNIX-Domain-Socket des Agenten) zu umgehen, können über die weitergeleitete Verbindung auf den lokalen Agenten zugreifen. Ein Angreifer kann kein Schlüsselmaterial von der Agenten, sie können jedoch Operationen mit den Schlüsseln durchführen, die es ihnen ermöglichen, sich mit den in den Agenten geladenen Identitäten zu authentifizieren.”

    – Agrof

    13. September 2017 um 19:24 Uhr


Benutzer-Avatar
Leukos

Wenn Sie die wählen key_file Meine Vermutung ist, dass sich der Schlüssel auf dem VPS/Landstreicher-Rechner befinden muss. Vielleicht möchten Sie es zuerst kopieren. Beachten Sie, dass Sie hier einen privaten Schlüssel benötigen, keinen öffentlichen.

Als zweite Option könnten Sie Ihren Schlüssel je nach Instanztyp an bestimmte Benutzer weitergeben. Angenommen, der Benutzer in VPS ist vpsuser und Sie stellen hauptsächlich auf diesen VPS bereit, Sie könnten Folgendes tun:

group_vars/all :

deploy_user=vpsuser

group_vars/vagrant

deploy_user=vagrant

Dann könnten Sie ein Playbook wie dieses haben:

- name: send key to remote deploy user
  copy: src=files/private_key dest=~/{{deploy_user}}/.ssh/priv_key

- name: read-write git checkout from github                                     
  git: repo={{ repository }} dest=/home/site key_file=~/{{deploy_user}}/.ssh/priv_key

Ich habe jedoch keine Ahnung, wie das Passwort für den entfernten privaten Schlüssel abgefragt werden könnte (ich glaube nicht, dass Ansible standardmäßig die Weiterleitung des Authentifizierungsagenten zulässt (check -vvvv Ausgabe), müssen Sie möglicherweise mit Ihrer herumspielen ~/.ansible.cfg).

Ich schlage vor, dass Sie einen bestimmten Schlüssel für Bereitstellungszwecke verwenden (mit schreibgeschützten Berechtigungen für Ihr Git-Repository). Auf diese Weise verlässt Ihr privater Schlüssel Ihren Computer nicht. Machen Sie diesen speziellen Schlüssel passwortlos. Ich denke, der Sicherheitskompromiss ist akzeptabel, da – er nur Ihren Code schützt, – Ihr Code auf der Maschine ausgecheckt wird, auf der sich der private Schlüssel befindet, sodass das Spiel bereits vorbei ist.

Eine andere Möglichkeit besteht darin, Ihre Anwendung von Ihrem lokalen Checkout mit Ansible zu verteilen: Erstellen Sie einen Tarball, kopieren Sie die Dateien, entpacken Sie sie und Sie sind fertig. Auf diese Weise müssen Sie keine Sicherheitsdaten auf Ihrem VPS hinterlegen.

Viel Glück.

1227910cookie-checkAutomatisieren Sie die Verwendung des lokalen SSH-Schlüssels für die Git-Bereitstellung mit Ansible

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

Privacy policy