Si vous avez besoin de zéro ou plusieurs espaces blancs après le caractère '#', ce qui suit devrait suffire :
- name: Uncomment line from /etc/ssh/sshd_config
lineinfile:
dest: /etc/ssh/sshd_config
regexp: '^#\s*AuthorizedKeysFile.*$'
line: 'AuthorizedKeysFile .ssh/authorized_keys'
La modification de votre code d'origine est l'ajout du \s*
et le .*$
dans la regex.
Explication :
\s
- correspond aux espaces blancs (espaces, tabulations, sauts de ligne et sauts de page)
*
- spécifie que l'expression à sa gauche (\s
) peut avoir zéro ou plusieurs instances dans une correspondance
.*
- correspond à zéro ou plus de n'importe quel caractère
$
- correspond à la fin de la ligne
Premièrement, vous utilisez la mauvaise langue. Avec Ansible, vous ne lui dites pas quoi faire, mais définissez l'état souhaité. Il ne devrait donc pas être Uncomment line form /etc/ssh/sshd_config
, mais Ensure AuthorizedKeysFile is set to .ssh/authorized_keys
.
Deuxièmement, peu importe l'état initial (si la ligne est commentée ou non). Vous devez spécifier une seule chaîne unique qui identifie la ligne.
Avec sshd_config
c'est possible comme AuthorizedKeysFile
La directive n'apparaît qu'une seule fois dans le fichier. Avec d'autres fichiers de configuration, cela peut être plus difficile.
- name: Ensure AuthorizedKeysFile is set to .ssh/authorized_keys
lineinfile:
dest: /etc/ssh/sshd_config
regexp: AuthorizedKeysFile
line: 'AuthorizedKeysFile .ssh/authorized_keys'
Il correspondra à toute ligne contenant AuthorizedKeysFile
chaîne (peu importe si elle est commentée ou non, ou combien d'espaces y a-t-il) et assurez-vous que la ligne complète est :
AuthorizedKeysFile .ssh/authorized_keys
Si la ligne était différente, Ansible signalera l'état "modifié".
Lors de la deuxième exécution, Ansible trouvera le AuthorizedKeysFile
à nouveau et découvrez que la ligne est déjà dans l'état souhaité, elle terminera donc la tâche avec l'état "ok".
Une mise en garde avec la tâche ci-dessus est que si l'une des lignes contient un commentaire tel qu'un commentaire réel et intentionnel (par exemple une explication en anglais contenant la chaîne AuthorizedKeysFile
), Ansible remplacera cette ligne par la valeur spécifiée dans line
.