Hacemos una revisión exhaustiva cada una de las noticias de nuestra web con la meta de mostrarte siempre la información con la mayor veracidad y actual.
Solución:
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 de 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 alimentaciones de formularios)
*
– especifica que la expresión a la 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á utilizando el idioma incorrecto. 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 un único, único string que identifica la línea.
Con sshd_config
esto es posible ya que AuthorizedKeysFile
La directiva ocurre solo una vez en el archivo. Con otros archivos de configuración, esto puede resultar 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
string (no importa si está comentado 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 descubre 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 el string AuthorizedKeysFile
), Ansible reemplazará esa línea con el valor especificado en line
.
Debo advertir esto con el punto de @ techraf de que el 99% de las veces un plantilla de un archivo de configuración es casi siempre mejor.
Tiempos que he hecho lineinfile
incluir archivos de configuración extraños y maravillosos que son administrados por algún otro proceso, o pereza para la configuración que aún no entiendo completamente y puede variar según la distribución / versión y no quiero mantener todas las variantes … todavía.
Continúe y aprenda más sobre Ansible … es genial porque puede seguir iterando desde los comandos de shell bash sin procesar hasta las mejores prácticas.
módulo lineinfile
Sigue siendo bueno ver cuál es la mejor forma de administrar una o dos configuraciones un poco mejor con esto:
tasks:
- name: Apply sshd_config settings
lineinfile:
path: /etc/ssh/sshd_config
# might be commented out, whitespace between key and value
regexp: '^#?s* item.key s'
line: " item.key item.value "
validate: '/usr/sbin/sshd -T -f %s'
with_items:
- key: MaxSessions
value: 30
- key: AuthorizedKeysFile
value: .ssh/authorized_keys
notify: restart sshd
handlers:
- name: restart sshd
service:
name: sshd
state: restarted
validate
no realice el cambio si el cambio no es válidonotify
/handlers
la forma correcta de reiniciar una vez solo al finalwith_items
(pronto se convertirá enloop
) si tiene varias configuraciones^#?
el ajuste podría ser comentado – ver la otra respuestas* item.key s
no coincidirá con otras configuraciones (es decirSettingA
no puede coincidirNotSettingA
oSettingAThisIsNot
)
Todavía podría golpear un comentario como # AuthorizedKeysFile - is a setting
con el que tenemos que vivir porque podría haber un escenario como AuthorizedKeysFile /some/path # is a setting
… vuelva a leer la advertencia.
módulo de plantilla
- name: Configure sshd
template:
src: sshd_config.j2
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: "0644"
validate: '/usr/sbin/sshd -T -f %s'
notify: restart sshd
handlers:
- name: restart sshd
service:
name: sshd
state: restarted
soporte de distribución múltiple
Y si no te da pereza dar soporte a todas tus distribuciones, mira este consejo.
- name: configure ssh
template: src= item dest= SSH_CONFIG backup=yes
with_first_found:
- " ansible_distribution - ansible_distribution_major_version .sshd_config.j2"
- " ansible_distribution .sshd_config.j2"
https://ansible-tips-and-tricks.readthedocs.io/en/latest/modifying-files/modifying-files/
(necesita actualizarse a un loop
utilizando el first_found
buscar)
Sección de Reseñas y Valoraciones
Recuerda que tienes la capacidad de interpretar tu experiencia si hallaste tu inconveniente .