Ich versuche, SSH-Hostschlüssel auf einer Handvoll Remote-Servern über ansible (und ssh-keygen
) neu zu generieren , aber die Dateien scheinen nicht angezeigt zu werden. Das Playbook läuft in Ordnung, aber die Dateien auf der Fernbedienung werden nicht geändert.
Ich muss auf das echo -e
Hackery zurückgreifen, da auf diesen Fernbedienungen Ubuntu 14.04 ausgeführt wird und nicht die richtige Version der python-pexpect
verfügbaren (laut ansible) vorhanden ist.
Was vermisse ich? Mein Playbook und meine Ausgabe sind unten:
Spielbuch
---
- hosts: all
become: true
gather_facts: false
tasks:
- name: Generate /etc/ssh/ RSA host key
command : echo -e 'y\n'|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
- name: Generate /etc/ssh/ DSA host key
command : echo -e 'y\n'|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
- name: Generate /etc/ssh/ ECDSA host key
command : echo -e 'y\n'|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
Ausgabe
$ ansible-playbook ./playbooks/ssh-hostkeys.yml -l myhost.mydom.com,
SUDO password:
PLAY [all] **********************************************************************************************
TASK [Generate /etc/ssh/ RSA host key] ******************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C -N "
]
}
TASK [Generate /etc/ssh/ DSA host key] ******************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C -N "
]
}
TASK [Generate /etc/ssh/ ECDSA host key] ****************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C -N "
]
}
PLAY RECAP **********************************************************************************************
myhost.mydom.com : ok=6 changed=3 unreachable=0 failed=0
file: state:absent ...
Ansatz für das Weiterleiten von Inhalten an ssh-keygen ausführen. Obwohl es wahrscheinlich keinen so großen Unterschied gibt.absent
ein paar Tagen nicht. Dadurch wird die Datei effektiv gelöscht, bevor der Schlüssel erneut generiert wird. Es ist ein viel klarerer Ansatz. Vielen Dank.Das ansible-
command
Modul leitet keine Befehle durch eine Shell . Dies bedeutet, dass Sie keine Shell-Operatoren wie die Pipe verwenden können. Aus diesem Grund wird das Pipe-Symbol in der Ausgabe angezeigt. Was ansible betrifft, hat es den Befehlecho
mit dem gesamten Rest der Zeile als Argumente für ausgeführtecho
.Wenn Sie die von einer Shell verarbeitete Befehlszeile benötigen, verwenden Sie
shell
anstelle voncommand
.Und es sollte einen besseren Weg geben, SSH-Hostschlüssel neu zu generieren, aber ich kann momentan keinen finden ...
quelle
echo ...
Bit funktionierte nach einem zweiten Durchlauf nicht (ich habe getestet, bei/tmp/
dem die Schlüssel beim ersten Mal nicht vorhanden waren). Wie Sie bereits erwähnt haben, habe ich zuerst die Host-Schlüssel entfernt und neue generiert. Soweit die Schlüssel automatisch neu generiert werden, hängt dies von Ihrer Verteilung ab, richtig? Nicht alle Linux-Distributionen verwenden systemd.Verwenden Sie für diese Aufgabe das Spezialmodul:
quelle
Entschuldigung, aber das konnte ich nicht "erstellt" in einer Aufgabe verwenden. Ich habe den folgenden Fehler erhalten:
konsequent benutze ich die folgenden aufgaben:
quelle
@Zoredache hat die richtige Antwort, schlägt jedoch für neuere Versionen von Ansible fehl (von @MaxiReglisse notiert). Verwenden Sie stattdessen den folgenden Code:
quelle
Eine weitere Option ist die Verwendung des Benutzermoduls . Positiv ist, dass Sie eine idempotente Aufgabe bekommen. Hier ist ein Beispiel zum Generieren von SSH-Schlüsseln auf localhost:
quelle
Verwenden Sie das Modul openssh_keypair und authorized_key, um die Schlüssel gleichzeitig zu erstellen und bereitzustellen, ohne sie auf Ihrem ansible Host zu speichern.
quelle