Estoy tratando de volver a generar claves de host ssh en un puñado de servidores remotos a través de ansible (y ssh-keygen
), pero los archivos no parecen estar apareciendo. El libro de jugadas funciona bien, pero los archivos del control remoto no se modifican.
Tengo que recurrir a la echo -e
hackery ya que estos controles remotos se están ejecutando Ubuntu 14.04 y no tienen la versión correcta de la python-pexpect
disposición (según ansible).
¿Qué me estoy perdiendo? Mi libro de jugadas y mi salida están a continuación:
libro de jugadas
---
- hosts: all
become: true
gather_facts: false
tasks:
- name: Generate /etc/ssh/ RSA host key
command : echo -e 'y\n'|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
- name: Generate /etc/ssh/ DSA host key
command : echo -e 'y\n'|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
- name: Generate /etc/ssh/ ECDSA host key
command : echo -e 'y\n'|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
salida
$ ansible-playbook ./playbooks/ssh-hostkeys.yml -l myhost.mydom.com,
SUDO password:
PLAY [all] **********************************************************************************************
TASK [Generate /etc/ssh/ RSA host key] ******************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C -N "
]
}
TASK [Generate /etc/ssh/ DSA host key] ******************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C -N "
]
}
TASK [Generate /etc/ssh/ ECDSA host key] ****************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C -N "
]
}
PLAY RECAP **********************************************************************************************
myhost.mydom.com : ok=6 changed=3 unreachable=0 failed=0
file: state:absent ...
enfoque sobre las tuberías de ssh-keygen. Aunque probablemente no haya tanta diferencia.absent
un par de días. Efectivamente, eso eliminará el archivo antes de volver a generar la clave. Es un enfoque mucho más claro. Gracias.El
command
módulo ansible no pasa comandos a través de un shell . Esto significa que no puede usar operadores de shell como la tubería, y es por eso que está viendo el símbolo de la tubería en la salida. En lo que respecta a ansible, ha ejecutado el comandoecho
con todo el resto de la línea como argumentos paraecho
.Si necesita la línea de comando procesada por un shell, use en
shell
lugar decommand
.Y, debería haber una mejor manera de regenerar las claves de host ssh, pero no puedo encontrar una en este momento ...
fuente
echo ...
bit no funcionó después de una segunda ejecución (estaba probando/tmp/
que las claves no existían la primera vez). Recurrí a eliminar las claves de host primero, como usted menciona, y generar las nuevas. En cuanto a que las claves se regeneren automáticamente, esto depende de su distribución, ¿correcto? No todas las distribuciones de Linux usan systemd.Use el módulo especial para esta tarea:
fuente
lo siento, pero no pude usar "crea" en una tarea. Obtuve el siguiente error:
en consecuencia, uso las siguientes tareas:
fuente
@Zoredache tiene la respuesta correcta pero falla (anotado por @MaxiReglisse) para las versiones recientes de Ansible. Use el siguiente código en su lugar:
fuente
Otra opción es usar el módulo de usuario . El lado positivo de esto es que obtendrá una tarea idempotente. Aquí hay un ejemplo de cómo generar claves ssh en localhost:
fuente
Utilice el módulo openssh_keypair y authorised_key para crear e implementar las claves al mismo tiempo sin guardarlas en su host ansible.
fuente