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» ]
- vars_files:
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
- Host gitl.alsur.es // o * para todos
convertir una clave PUTTY en openssh para que funcione desde linux
- Open PuttyGen
- Click Load
- Load your private key
- Go to
Conversions->Export OpenSSHand 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.

¿Algo que comentar?
Lo siento, debes estar conectado para publicar un comentario.