Saltar al contenido

Línea de descomentar Ansible en el archivo

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álido
  • notify/handlers la forma correcta de reiniciar una vez solo al final
  • with_items (pronto se convertirá en loop) si tiene varias configuraciones
  • ^#? el ajuste podría ser comentado – ver la otra respuesta
  • s* item.key s no coincidirá con otras configuraciones (es decir SettingA no puede coincidir NotSettingA o SettingAThisIsNot)

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 .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *