Estoy tratando de escribir un libro de jugadas Ansible para arrancar mis servidores. De forma predeterminada en Linode, solo puedo iniciar sesión como root con una contraseña, por lo que mi libro de jugadas inicia sesión como root, crea un usuario no root con una clave SSH e inhabilita la raíz y la contraseña SSH.
¡Esto es un problema porque ahora no puedo volver a ejecutar ese libro de jugadas ya que el inicio de sesión raíz está desactivado! Me gustaría que el libro de jugadas sea idempotente y no tenga que agregar y quitar hosts después de arrancarlos.
Respuestas:
Me gusta hacerlo de esta manera:
Intento conectarme al host remoto con mi usuario ansible. Si esto es imposible (en la primera ejecución), me conecto como root y creo el usuario ansible junto con su
authorized_keys
archivo y sussudo
derechos.En ejecuciones posteriores, la conexión como usuario ansible funciona, por lo que se puede omitir el bloque de tareas.
Una vez que el host remoto está arrancado, puedo continuar con el usuario ansible y
become
:fuente
remote_user
en tu libro de jugadas después de esa primera ejecución? Eso no es idempotente. Espero estar perdiendo algo.bootstrap.yml
ysite.yml
, dondesite.yml
incluyebootstrap.yml
antes que nada). Si la primera tarea debootstrap.yml
falla, todas las demás tareas de esta jugada se omiten ysite.yml
se hacen cargo."skip_reason": "Conditional result was False"
. Ejecutar la jugada con-vvv
muestra que la llamada ssh regresa"msg": "non-zero return code", "rc": 255,
when
condición:when: not "OK" in check_ansible_user.stdout
Yo haría lo siguiente:
sshd_config
(tendería a recomendarle que administre todo el archivo, usando untemplate
, pero eso depende de usted), y deshabilite los inicios de sesión de raízPara el primer rol (el de base), tiendo a usar algo como:
Para la configuración SSH, usaría:
Las dependencias de roles de Ansible se documentan aquí .
También puede usar el pedido dentro de su libro de jugadas para hacer esto.
Tengo algunas cosas ansibles en github (de donde se toma lo anterior), si quieres verlo en contexto
fuente
Si crea sus servidores en Linode con el módulo de linode se podía registrar la
return value
de lalinode
tarea e incluyen las tareas de rutina de carga con las una condición de comprobación de la outout de la tarea linode. Eso debería ser idempotente. Intenta algo como esto:bootstrap.yml
contendría todas las tareas necesarias para deshabilitar el inicio de sesión raíz de ssh, etc.fuente
Tal vez usted podría modificar el
ansible_ssh_user
en el inventario después de haber bootstrap el anfitrión?fuente