Konfigurieren Sie SSH-Anmeldeinformationen pro Umgebung

10

Ich versuche herauszufinden, wie die SSH-Anmeldeinformationen für eine Produktions- und Staging-Umgebung mit Ansible separat konfiguriert werden. Ich verstehe, dass Sie die Server-IP-Adressen und Hostnamen mithilfe verschiedener Inventardateien separat konfigurieren können, indem Sie das Argument -ioder --inventory-filean den ansible-playbookBefehl übergeben. Ich sehe jedoch keine solche Option für ansible.cfg. Derzeit leben die Anmeldeinformationen in /etc/ansible/ansible.cfg:

[defaults]
private_key_file=/home/caleb/.ssh/staging_key.pem
remote_user=ubuntu
sudo_user=root
gathering=explicit

Wie kann ich mehrere SSH-Anmeldeinformationen konfigurieren, einen für die Produktion und einen für die Bereitstellung?

user369450
quelle
Was ändert sich zwischen Ihren Umgebungen? Nur die Schlüsseldatei oder auch der remote_user / sudo_user?
Tedder42
@ tedder42 Der private SSH-Schlüssel und remote_user.
user369450
Warum behandeln Sie das nicht in Ihrer .ssh / config?
Udondan
@udondan Gibt es eine Möglichkeit, einen einzelnen Schlüssel einmal für mehrere Hosts in anzugeben .ssh/config?
user369450
Ja, das kannst du machen. Sie können mehrere Gruppen mit expliziten Hostnamen oder Mustern erstellen. Lassen Sie mich ein Beispiel in einer Antwort posten.
Udondan

Antworten:

16

Scheint, als ob meine erste Antwort nicht ganz richtig war. Während es natürlich möglich ist, es .ssh/configwie unten beschrieben zu lösen , scheint es auch mit Ansibles Behavioral Inventory Parameters möglich zu sein .

Sie sollten (laut Dokumentation) in der Lage sein, die Schlüsseldatei und den Benutzer in Ihrem Inventar entweder pro Host oder pro Gruppe zu definieren.

Definition pro Gruppe:

[some_hosts]
host1.foo
host2.foo

[some_hosts:vars]
ansible_ssh_user=ubuntu
ansible_ssh_private_key_file=/home/caleb/.ssh/staging_key.pem

Definition pro Host:

[some_hosts]
host1.foo     ansible_ssh_user=ubuntu          ansible_ssh_private_key_file=/home/caleb/.ssh/staging_key.pem
host2.foo     ansible_ssh_user=another_user    ansible_ssh_private_key_file=/home/caleb/.ssh/production_key.pem

Sie können jedoch bereits mehrere Hostgruppen in Ihrer .ssh/configGruppe definieren, und jede Gruppe kann separate Einstellungen für Schlüssel und Benutzer vornehmen.

Hier ist ein kurzes Beispiel

#Example with a wildcard
Host *.foo.com
  user ubuntu
  IdentityFile /home/caleb/.ssh/staging_key.pem

#Example with multiple hostnames
Host hostname.one hostname.two hostname.three
  user other_user
  IdentityFile /home/caleb/.ssh/production_key.pem

Sie können auch eine Standardeinstellung definieren und diese später mit detaillierteren Einstellungen überschreiben.

Host *
  user defaut_username

Host somehost
  user special_username
Udondan
quelle