Se hai bisogno di zero o più spazi bianchi dopo il carattere '#', dovrebbe essere sufficiente quanto segue:
- name: Uncomment line from /etc/ssh/sshd_config
lineinfile:
dest: /etc/ssh/sshd_config
regexp: '^#\s*AuthorizedKeysFile.*$'
line: 'AuthorizedKeysFile .ssh/authorized_keys'
La modifica al tuo codice originale è l'aggiunta del \s*
e il .*$
nella regex.
Spiegazione:
\s
- corrisponde agli spazi bianchi (spazi, tabulazioni, interruzioni di riga e feed modulo)
*
- specifica che l'espressione alla sua sinistra (\s
) può avere zero o più istanze in una corrispondenza
.*
- corrisponde a zero o più di qualsiasi carattere
$
- corrisponde alla fine della riga
In primo luogo, stai usando la lingua sbagliata. Con Ansible, non gli dici cosa fare, ma definisci lo stato desiderato. Quindi non dovrebbe essere Uncomment line form /etc/ssh/sshd_config
, ma Ensure AuthorizedKeysFile is set to .ssh/authorized_keys
.
In secondo luogo, non importa quale sia lo stato iniziale (se la riga è commentata o meno). Devi specificare una singola stringa univoca che identifichi la riga.
Con sshd_config
questo è possibile come AuthorizedKeysFile
direttiva ricorre una sola volta nel file. Con altri file di configurazione questo potrebbe essere più difficile.
- name: Ensure AuthorizedKeysFile is set to .ssh/authorized_keys
lineinfile:
dest: /etc/ssh/sshd_config
regexp: AuthorizedKeysFile
line: 'AuthorizedKeysFile .ssh/authorized_keys'
Corrisponderà a qualsiasi riga contenente AuthorizedKeysFile
string (non importa se è commentata o meno, o quanti spazi ci sono) e assicurati che la riga completa sia:
AuthorizedKeysFile .ssh/authorized_keys
Se la linea fosse diversa, Ansible riporterà lo stato "modificato".
Alla seconda esecuzione, Ansible troverà AuthorizedKeysFile
di nuovo e scopri che la linea è già nello stato desiderato, quindi terminerà l'attività con lo stato "ok".
Un avvertimento con l'attività di cui sopra è che se una qualsiasi delle righe contiene un commento come un commento reale e intenzionale (ad esempio una spiegazione in inglese contenente la stringa AuthorizedKeysFile
), Ansible sostituirà quella riga con il valore specificato in line
.