Para no perder el tiempo: ansible, gitlab-runner, sudo y autossh

Publicado en 24 octubre, 2019

Comprobaciones que hay que hacer para no perder un día en cosas que se pueden hacer en una hora si se toman estas referencias.

ESCENARIO

  • Deploy desde vhome64
  • Tunel autossh desde d18 a la 119, que hará unas acciones desde el deploy
  • Se ejecutaran comandos en la 119 con un usuario que no es root, por lo que hay que limitar los comandos

GITLAB-RUNNER

Hay que comprobar que no tenemos la misma instancia (key) de gitlab-runner en varias maquinas. Esto estaba pasando en vhome64 y box64 y aleatoriamente encontramos acciones ejecutandose en el runner incorrecto y sus correspondientes errores.

Comprobar también si en webmin:csf está la otra maquina como «allow IP».

AUTOSSH

Creamos un tunel con autossh para que el puerto 2119 del host actue como el 2119 (ssh) de la maquina 119.

  • ¿Tenemos el ssh abierto (o disponible para maquinas conocidas)? telnet $IP  $PUERTO
  • Si la respuesta es NO, hay que revisar esta configuración
  • Si la respuesta es SI, ¿funciona el tunel? telnet $IP_HOST $PUERTO_HOST
  • ¿Funciona el tunel? Podemos seguir adelante con las tareas que estamos haciendo.
  • ¿No funciona el tunel? En mi caso el problema estaba en la maquina 119, que no permitía el forwarding.  A comprobar:
    • cat /proc/sys/net/ipv4/ip_forward -> tiene que ser un 1
    • cat /etc/ssh/sshd_config
      • AllowUser $user -> $user debe estar entre los usuarios permitidos
      • AllowTcpForwarding yes -> aunque ipv4/ip_forward lo tengamos en 1, esto es vital. De hecho fue la solución.
    • Probar hacer un ssh $USER:$IP -p $PUERTO a la maquina virtual. Puede ser que no tenga la clave copiada. Si es así hacemos: ssh-copy-id $USER:$IP -p $PUERTO

ansible con sudo

Si queremos usar en el destino un usuario distinto a root, debemos darle permisos de sudo (/etc/sudoers) pero no todos. El que puede ser imperceptible es el de BECOME-SUCCESS, que es un comando de control que usa ansible.

  • Cmnd_Alias CMD_ANSIBLE = /bin/sh -c echo BECOME-SUCCESS*
    $USUARIO ALL=(ALL) NOPASSWD:/bin/systemd,/usr/bin/rsync,CMD_ANSIBLE

https://www.linuxito.com/gnu-linux/nivel-alto/941-lidiando-con-la-in-seguridad-de-ansible

entendiendo ansible

  • become_user: $USER no significa que se loguee con el usuario $USER si no que el usuario con el que conecta es «sudo -u $USER cmd». Esto soluciona problemas como que no encuentra «node» (el usuario que conecta no tiene esa ruta, mientras que $USER si)
  • actualizar a version ansible a la ultima versión (soluciona systemd is not a legal parameter in an Ansible task or handler):
    • git clone https://github.com/ansible/ansible.git
    • cd ansible
    • git branch -a | grep stable
    • git checkout stable-$V
    • pip install packaging
    • make
      make install
    • ansible –version
  • comprobar que no se está reciclando variables y se ha quedado un valor antiguo. Importante que la url del git esté bien o se puede liar.
  • Podemos incluir archivos de variables con:
    • vars_files:
      – [ «vars/foo.yml», «vars/bar.yml», «vars/default.yml» ]

usar una clave SSH distinta para otra conexión

  • modificamos nuestro archivo ~/.ssh/config
    • Host gitl.alsur.es // o * para todos
      IdentityFile /home/webs/ssh-keys/id_rsa

convertir una clave PUTTY en openssh para que funcione desde linux

  • Open PuttyGen
  • Click Load
  • Load your private key
  • Go to Conversions->Export OpenSSH and export your private key
  • Empezamos a usar esta clave privada desde linux y la otra desde PUTTY/Windows.

convertir una clave openssh en clave PUTTY

  • Start puttygen, and click on Conversions->Import key, then click Browse and select the private key generated with openssh (e.g. id_rsa).

crear clave desde PUTTYgen

  • Descargar y ejecutar el generador puttygen.exe.
  • En la sección «Parameters» elegir SSH2 DSA y presionar Generate.
  • Mueve tu ratón aleatoriamente en la pantalla pequeña para generar un par de claves.
  • Introduce un comentario clave, que la identificará (es útil cuando usas varias claves SSH).
  • Escribe en el passphrase y confírmalo. El passphrase se usa para proteger tu clave. Se te pedirá cuando te conectes por SSH.
  • Haz clic en «Save private key» para guardar tu clave privada.
  • Haz clic en «Save public key» para guardar tu clave pública.

 


Sin respuestas to "Para no perder el tiempo: ansible, gitlab-runner, sudo y autossh"


    ¿Algo que comentar?