Wenn Sie nach dem Zeichen „#“ null oder mehr Leerzeichen benötigen, sollte Folgendes ausreichen:
- name: Uncomment line from /etc/ssh/sshd_config
lineinfile:
dest: /etc/ssh/sshd_config
regexp: '^#\s*AuthorizedKeysFile.*$'
line: 'AuthorizedKeysFile .ssh/authorized_keys'
Die Änderung an Ihrem ursprünglichen Code ist die Hinzufügung des 03
und die 12
in der Regex.
Erklärung:
20
- Entspricht Leerzeichen (Leerzeichen, Tabulatoren, Zeilenumbrüche und Formularvorschübe)
33
- gibt an, dass der Ausdruck links davon (45
) kann null oder mehr Instanzen in einer Übereinstimmung haben
51
- stimmt mit keinem oder mehreren beliebigen Zeichen überein
61
- entspricht dem Zeilenende
Erstens verwenden Sie die falsche Sprache. Bei Ansible sagen Sie ihm nicht, was es tun soll, sondern definieren den gewünschten Zustand. Es sollte also nicht 79
sein , aber 86
.
Zweitens spielt es keine Rolle, wie der Anfangszustand ist (ob die Zeile kommentiert ist oder nicht). Sie müssen eine einzelne, eindeutige Zeichenfolge angeben, die die Zeile identifiziert.
Mit 91
dies ist als 106
möglich Direktive kommt nur einmal in der Datei vor. Bei anderen Konfigurationsdateien könnte dies schwieriger sein.
- name: Ensure AuthorizedKeysFile is set to .ssh/authorized_keys
lineinfile:
dest: /etc/ssh/sshd_config
regexp: AuthorizedKeysFile
line: 'AuthorizedKeysFile .ssh/authorized_keys'
Es passt zu jeder Zeile, die 118
enthält Zeichenfolge (egal ob kommentiert oder nicht, oder wie viele Leerzeichen vorhanden sind) und stellen Sie sicher, dass die vollständige Zeile lautet:
121
Wenn die Zeile anders wäre, meldet Ansible den Status "geändert".
Beim zweiten Durchlauf findet Ansible den 137
erneut und stellen Sie fest, dass sich die Leitung bereits im gewünschten Zustand befindet, sodass die Aufgabe mit dem Zustand "OK" beendet wird.
Ein Vorbehalt bei der obigen Aufgabe besteht darin, dass, wenn eine der Zeilen einen Kommentar enthält, wie z. B. ein echter, absichtlicher Kommentar (z ), ersetzt Ansible diese Zeile durch den in 158
angegebenen Wert .