Introducció a HashiCorp Vault OTP
Soc Òscar Mas i continuant amb les funcionalitats que ens pot donar HashiCorp Vault, ens trobem en una que no és molt coneguda, però quan sapigueu de la seva existència i funcionalitat, estic segur que us enamorarà. Aquesta funcionalitat es diu OTP (One-Time Password).
Què és HashiCorp Vault OTP?
Per entendre el sistema d'OTP (One-Time Password), ens hem de posar en situació. Imagineu que un extern, ha d'accedir per fer-ne una de determinada feina a un servidor de la nostra infraestructura, i un cop acabada la feina, no volem que pugui accedir mai més a aquest servidor. Això es podria fer copiant la seva clau SSH pública al servidor i un cop acabada la feina, eliminar aquesta clau pública que hem guardat al servidor. Però això implica un risc molt alt: ens hem de recordar de treure la seva clau pública del servidor i encara que em jureu que la traureu, estic segur que si fem aquesta operació una sèrie de cops, al final us oblidareu de treure la clau SSH i es quedarà en aquell servidor de per vida. En aquest punt és on entra: OTP (One-Time Password).
Laboratori de HashiCorp Vault OTP
La funcionalitat d'OTP (One-Time Password), és molt senzilla: donar accés a un servidor només un cop. Perquè ho podeu veure millor, farem un laboratori, en el qual necessitarem dos equips:
- vault (172.26.0.30): servidor de Vault
- client-otp-vault (172.26.0.240): equip que farem servir de client
Confiruació de Vault
Activació del motor SSH OTP
El primer que farem, és entrar al contenidor de HashiCorp Vault, autenticar-se i activar el motor de secrets de SSH OTP:
root@vault:~# docker exec -it vault ash / # export VAULT_ADDR=http://127.0.0.1:8200 / # vault login s.KaU83zJXYPXaZZCfFkgT8eJX
/ # vault secrets enable -path=otp_ssh -description="Motor SSH para contraseñas de un solo uso (OTP)" ssh / # vault secrets list Path Type Accessor Description ---- ---- -------- ----------- cubbyhole/ cubbyhole cubbyhole_56ed61f9 per-token private secret storage identity/ identity identity_53938dc5 identity store otp_ssh/ ssh ssh_68e013df Motor SSH para contraseñas de un solo uso (OTP) sys/ system system_6e42f7a1 system endpoints used for control, policy and debugging
Creació del rol OTP
Seguidament crearem una política de seguretat, en la qual definirem que qualsevol credencial generada serà d'un sol ús (otp), per a la xarxa interna de l'empresa (172.26.0.0/24) i que si l'usuari no especifica res, intentarà connectar-se com a username (default_user).
/ # vault write otp_ssh/roles/otp_key_role \ key_type=otp \ default_user=username \ cidr_list=172.26.0.0/24 \ allowed_users="*"
Generació de la contrasenya d'un sol ús
Ara el que necessitem és que l'usuari oscar.mas pugui accedir al servidor que té la IP: 172.26.0.240. El que farem és indicar-li a Vault aquestes dades i Vault ens tornarà la contrasenya (aacedcc6-5281-8eb1-869f-f0a5b66c4bab), recordeu d'anotar-la, ja que més endavant quan vulguem accedir al servidor i ens demani una contrasenya, li hem de posar aquesta.
/ # vault write otp_ssh/creds/otp_key_role ip=172.26.0.240 username=oscar.mas Key Value --- ----- lease_id otp_ssh/creds/otp_key_role/B5YaFNncHYiM4ujo15oAAddg lease_duration 768h lease_renewable false ip 172.26.0.240 key aacedcc6-5281-8eb1-869f-f0a5b66c4bab key_type otp port 22 username oscar.mas
Configuració del Client
En aquest punt, hem d'anar al nostre servidor que farà de client (client-otp-vault) i indicar-li que quan algú vulgui accedir per SSH, consulti al servidor de Vault. Això ho podem fer gràcies a: vault-ssh-helper. Si volem saber l'última versió de vault-ssh-helper, ho podeu fer en aquesta web: https://releases.hashicorp.com/vault-ssh-helper/
root@client-otp-vault:~# cd /tmp root@client-otp-vault:/tmp# wget https://releases.hashicorp.com/vault-ssh-helper/0.2.4/vault-ssh-helper_0.2.4_linux_amd64.zip root@client-otp-vault:/tmp# apt-get update && apt-get install -y unzip root@client-otp-vault:/tmp# unzip vault-ssh-helper_0.2.4_linux_amd64.zip root@client-otp-vault:/tmp# mv vault-ssh-helper /usr/local/bin/ root@client-otp-vault:/tmp# chmod +x /usr/local/bin/vault-ssh-helper
Configuració del servidor SSH
Ara hem de modificar la configuració del dimoni de SSH del servidor destí per permetre que PAM faci la seva feina
root@client-otp-vault:~# vim /etc/ssh/sshd_config # Habilita la autenticación por teclado interactivo (necesaria para PAM) KbdInteractiveAuthentication yes # Asegura que SSH use el sistema PAM del sistema operativo UsePAM yes # Deshabilita el login directo por contraseña estándar (opcional, por seguridad) PasswordAuthentication no
root@client-otp-vault:~# systemctl restart ssh
Aquí és on se li diu al sistema que qualsevol persona que vulgui connectar-se, ha de consultar a Vault:
root@client-otp-vault:~# vim /etc/pam.d/vault-otp # /etc/pam.d/vault-otp auth [success=done default=ignore] pam_exec.so quiet expose_authtok /usr/local/bin/vault-ssh-helper -config=/etc/vault-ssh-helper.d/config.hcl -dev
root@client-otp-vault:~# vim /etc/pam.d/sshd @include vault-otp
root@client-otp-vault:~# mkdir -p /etc/vault-ssh-helper.d root@client-otp-vault:~# vim /etc/vault-ssh-helper.d/config.hcl vault_addr = "http://172.26.0.30" ssh_mount_point = "otp_ssh" tls_skip_verify = true allowed_roles = "*"
Amb tota aquesta configuració, quan l'usuari oscar.mas intenti fer un SSH al servidor, SSH passarà el control a PAM, PAM cridarà a vault-ssh-helper, i aquest comprovarà instantàniament si la contrasenya utilitzada és la OTP.
Verificació del funcionament
Però com sempre, hem de validar que tot funciona correctament:
root@client-otp-vault:/tmp# vault-ssh-helper -verify-only -config=/etc/vault-ssh-helper.d/config.hcl -dev 2026-06-20T12:13:55.886+0200 [WARN] Dev mode is enabled! 2026-06-20T12:13:55.887+0200 [INFO] using SSH mount point: otp_ssh 2026-06-20T12:13:55.887+0200 [INFO] using namespace: 2026-06-20T12:13:55.893+0200 [INFO] vault-ssh-helper verification successful!
Que no se'ns oblidi crear l'usuari al sistema
root@client-otp-vault:~# useradd -m -s /bin/bash oscar.mas
Ara l'únic que queda és iniciar sessió per SSH amb l'usuari indicat:
$ ssh oscar.mas@172.26.0.240
Recordeu que la contrasenya que hem de posar és la que ens ha donat Vault: aacedcc6-5281-8eb1-869f-f0a5b66c4bab i que aquesta contrasenya és d'un sol ús. Sí un cop feta servir, la contrasenya deixarà de funcionar. Això vol dir que si necessita fer un altre inici de sessió per qualsevol motiu, s'ha de tornar a generar un altre OTP:
/ # vault write otp_ssh/creds/otp_key_role ip=172.26.0.240 username=oscar.mas
Per validar que l'usuari ha pogut accedir al servidor i tot ha anat bé, podem veure els logs del SSH:
root@client-otp-vault:~# journalctl -u ssh -f Jun 20 12:27:01 client-otp-vault sshd-session[1105]: Accepted keyboard-interactive/pam for oscar.mas from 172.26.0.218 port 57506 ssh2 Jun 20 12:27:01 client-otp-vault sshd-session[1105]: pam_unix(sshd:session): session opened for user oscar.mas(uid=1001) by oscar.mas(uid=0)
Conclusió
HashiCorp Vault OTP és una funcionalitat molt útil quan necessitem concedir accessos temporals a servidors sense haver de gestionar claus SSH permanents. Mitjançant contrasenyes d'un sol ús i la integració amb PAM i "vault-ssh-helper", podem reduir considerablement el risc de deixar accessos oberts un cop finalitzades les tasques de manteniment.
Espero que us hagi agradat aquesta funcionalitat de Hashicorp Vault.