Herramientas, automatización y NSE para SSH
El workflow de SSH separa banner, negociación, host key, autenticación y capacidades posteriores. OpenSSH es el control principal porque permite observar cada fase con verbosidad.
Ncat permite conservar únicamente la línea de identificación antes de iniciar una negociación SSH. En -nv, -n desactiva la resolución de nombres y -v muestra el resultado de la conexión:
ncat -nv FQDN PORTOpenSSH como herramienta de diagnóstico
Sección titulada «OpenSSH como herramienta de diagnóstico»-vvv aumenta la verbosidad. -p fija el puerto. PreferredAuthentications=none intenta llegar hasta la oferta de métodos sin usar una credencial:
ssh -vvv -p PORT \ -o PreferredAuthentications=none \ USERNAME@FQDNEl servidor puede revelar métodos distintos según el usuario. Una respuesta Permission denied no confirma que la cuenta exista.
Una comprobación repetible debe evitar identidades y reintentos heredados de la configuración local. -o ConnectTimeout=5 limita el establecimiento de la conexión. -o ConnectionAttempts=1 evita nuevos intentos TCP. -o IdentitiesOnly=yes impide ofrecer claves adicionales del agente. -o BatchMode=yes desactiva prompts. -E FILE guarda el debug:
ssh -vvv -E evidence/ssh-debug.log \ -p PORT \ -o ConnectTimeout=5 \ -o ConnectionAttempts=1 \ -o IdentitiesOnly=yes \ -o BatchMode=yes \ -o PreferredAuthentications=none \ USERNAME@FQDNEl fichero registra algoritmos, host keys, métodos ofrecidos y configuración aplicada. También puede revelar nombres locales de claves y usuarios, por lo que se sanea antes de compartirlo.
ssh -G muestra la configuración efectiva del cliente sin conectar:
ssh -G -p PORT USERNAME@FQDNEsto ayuda a detectar ProxyJump, identidades, algoritmos o opciones heredadas de ~/.ssh/config.
-J JUMP_USER@JUMP_HOST crea un salto mediante ProxyJump. El destino ve la conexión desde el jump host, mientras que la negociación SSH de extremo a extremo sigue ocurriendo con el destino:
ssh -J JUMP_USER@JUMP_HOST \ -p PORT \ -o ConnectTimeout=5 \ -o ConnectionAttempts=1 \ -o IdentitiesOnly=yes \ USERNAME@FQDNRegistra las host keys de ambos saltos y no confundas un fallo en el jump host con un fallo del destino. ssh -G muestra la configuración final después de aplicar Host, Match, ProxyJump y opciones de línea de comandos.
Host keys
Sección titulada «Host keys»ssh-keyscan recupera claves sin verificar identidad:
ssh-keyscan -p PORT -T 5 FQDN > evidence/hostkeysssh-keygen -lf evidence/hostkeys-T 5 limita la espera a cinco segundos. Compara fingerprints con una fuente independiente. Guardar una clave en known_hosts no la convierte en confiable por sí solo.
ssh-audit
Sección titulada «ssh-audit»ssh-audit enumera banners, algoritmos y recomendaciones:
ssh-audit FQDN:PORTLas conclusiones dependen de la versión de la herramienta y de su política. Conserva el inventario de algoritmos y valida los elementos relevantes con OpenSSH:
ssh -Q cipherssh -Q kexssh -Q keyssh -Q muestra capacidades del cliente local, no del servidor.
ssh-hostkey obtiene host keys. ssh2-enum-algos enumera algoritmos. ssh-auth-methods prueba métodos para un usuario y puede producir una autenticación fallida:
sudo nmap -sV -n -Pn -p PORT \ --script ssh-hostkey,ssh2-enum-algos \ TARGET_IPsudo nmap -sV -n -Pn -p PORT \ --script ssh-auth-methods \ --script-args ssh.user=USERNAME \ TARGET_IPSepara ssh-brute de estas consultas. Antes de autenticar repetidamente, registra política de bloqueo, listas y tasa.
Configuración efectiva del servidor
Sección titulada «Configuración efectiva del servidor»Con acceso local, sshd -T resuelve los valores predeterminados y las directivas Include:
sudo sshd -Tsudo sshd -T -C user=USERNAME,host=FQDN,addr=CLIENT_IPLa segunda forma aplica bloques Match. El archivo principal por sí solo puede ocultar la configuración que recibe un usuario concreto.