Si necesita cero o más espacios en blanco después del carácter '#', lo siguiente debería ser suficiente:
- name: Uncomment line from /etc/ssh/sshd_config
lineinfile:
dest: /etc/ssh/sshd_config
regexp: '^#\s*AuthorizedKeysFile.*$'
line: 'AuthorizedKeysFile .ssh/authorized_keys'
La modificación a su código original es la adición del \s*
y el .*$
en la expresión regular.
Explicación:
\s
- coincide con espacios en blanco (espacios, tabulaciones, saltos de línea y fuentes de formulario)
*
- especifica que la expresión a su izquierda (\s
) puede tener cero o más instancias en una coincidencia
.*
- coincide con cero o más de cualquier carácter
$
- coincide con el final de la línea
En primer lugar, estás usando el idioma equivocado. Con Ansible, no le dice qué hacer, sino que define el estado deseado. Entonces no debería ser Uncomment line form /etc/ssh/sshd_config
, pero Ensure AuthorizedKeysFile is set to .ssh/authorized_keys
.
En segundo lugar, no importa cuál sea el estado inicial (si la línea está comentada o no). Debe especificar una cadena única y única que identifique la línea.
Con sshd_config
esto es posible como el AuthorizedKeysFile
directiva se produce sólo una vez en el archivo. Con otros archivos de configuración esto puede ser más difícil.
- name: Ensure AuthorizedKeysFile is set to .ssh/authorized_keys
lineinfile:
dest: /etc/ssh/sshd_config
regexp: AuthorizedKeysFile
line: 'AuthorizedKeysFile .ssh/authorized_keys'
Coincidirá con cualquier línea que contenga AuthorizedKeysFile
cadena (sin importar si está comentada o no, o cuántos espacios hay) y asegúrese de que la línea completa sea:
AuthorizedKeysFile .ssh/authorized_keys
Si la línea fuera diferente, Ansible informará el estado "cambiado".
En la segunda ejecución, Ansible encontrará el AuthorizedKeysFile
nuevamente y descubra que la línea ya está en el estado deseado, por lo que finalizará la tarea con el estado "ok".
Una advertencia con la tarea anterior es que si alguna de las líneas contiene un comentario, como un comentario real e intencional (por ejemplo, una explicación en inglés que contenga la cadena AuthorizedKeysFile
), Ansible reemplazará esa línea con el valor especificado en line
.