Guías de SSH
Respuestas a los problemas que surgen al trabajar en servidores por SSH, con comandos para copiar. Están escritas para OpenSSH, así que casi todas sirven con cualquier cliente.
Mensajes de error
Qué significa cada mensaje y cómo solucionarlo.
- Túnel SSH: "bind: Address already in use" y "remote port forwarding failed"
Arregla bind Address already in use, channel_setup_fwd_listener y remote port forwarding failed. Encuentra qué ocupa el puerto y haz que el túnel falle claro.
- "channel 3: open failed: administratively prohibited: open failed"
channel open failed: administratively prohibited significa que sshd o authorized_keys prohíbe este reenvío. Revisa AllowTcpForwarding, PermitOpen y restrict.
- client_loop: send disconnect: Broken pipe: evita que SSH se corte
Soluciona "client_loop: send disconnect: Broken pipe" y "packet_write_wait": configura ServerAliveInterval, entiende los timeouts de NAT y cuándo usar tmux.
- Error SSH "ssh: connect to host port 22: Connection refused": causas y solución
Qué significa "ssh: connect to host port 22: Connection refused" y cómo encontrar la causa: sshd detenido, puerto equivocado, dirección de escucha o firewall.
- "kex_exchange_identification: read: Connection reset by peer"
kex_exchange_identification: Connection reset by peer o Connection closed by remote host. Revisa penalizaciones, MaxStartups, TCP wrappers, firewalls y túneles.
- Error SSH "Operation timed out" o "Connection timed out" en el puerto 22
Por qué SSH dice "Operation timed out" o "Connection timed out": firewalls, grupos de seguridad, rutas o una dirección equivocada, y cómo saber cuál es.
- "Could not open a connection to your authentication agent": cómo solucionarlo
Soluciona el error Could not open a connection to your authentication agent: inicia ssh-agent con eval, corrige SSH_AUTH_SOCK o activa el servicio de Windows.
- "ssh: Could not resolve hostname": causas y cómo solucionarlo
Soluciona ssh: Could not resolve hostname, nodename nor servname provided o Name or service not known: una errata, un alias que falta, el puerto o el DNS.
- Cómo depurar una conexión SSH
Depura SSH paso a paso: lee la salida de ssh -v línea a línea, comprueba los ajustes reales con ssh -G y mira los motivos del servidor con sshd -d y sshd -T.
- "git@github.com: Permission denied (publickey)": cómo solucionarlo
Soluciona git@github.com: Permission denied (publickey) y Could not read from remote repository. Prueba con ssh -T y revisa la clave, el agente y la cuenta.
- WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! Qué hacer
Qué significa "REMOTE HOST IDENTIFICATION HAS CHANGED", cómo distinguir una reinstalación de un ataque, comprobar la huella nueva por otra vía y usar ssh-keygen -R.
- "Host key verification failed" en SSH, scripts y CI
Por qué SSH muestra Host key verification failed, cómo distinguir un host desconocido de una clave cambiada y cómo arreglarlo bien en scripts, cron y CI.
- Load key: "invalid format" o "error in libcrypto"
Soluciona Load key invalid format y error in libcrypto: saltos de línea, falta el salto final, clave pública por error, archivo PPK o un secreto de CI dañado.
- Qué es known_hosts y cómo verificar la huella de un host SSH
Qué es el archivo known_hosts de SSH, su formato y las entradas con hash, cómo verificar la huella de un host, y ssh-keyscan, accept-new, UpdateHostKeys y SSHFP.
- SSH "no matching key exchange method found" o "no matching host key type found": cómo solucionarlo
Soluciona "no matching key exchange method found", "no matching host key type found" y "no matching cipher found" para un host antiguo, con seguridad, en ssh config.
- "sign_and_send_pubkey: no mutual signature supported": cómo solucionarlo
sign_and_send_pubkey: no mutual signature supported: tu clave RSA necesita SHA-1 para un servidor antiguo. Compruébalo y arréglalo con seguridad en ese host.
- "ssh: connect to host port 22: No route to host"
ssh: connect to host port 22: No route to host. Distingue una máquina apagada de una regla de firewall o una ruta rota, con un comando para cada causa.
- "Permission denied, please try again." con la contraseña correcta
SSH dice Permission denied, please try again. Averigua si es la contraseña, el nombre de usuario, las reglas de root, una cuenta bloqueada o AllowUsers.
- "WARNING: connection is not using a post-quantum key exchange algorithm": qué significa
OpenSSH 10.1 y posteriores avisan cuando una conexión no usa intercambio de claves poscuántico. Qué significa, cómo comprobar el servidor y cómo solucionarlo.
- "Pseudo-terminal will not be allocated because stdin is not a terminal": qué significa y cómo solucionarlo
Por qué SSH muestra Pseudo-terminal will not be allocated because stdin is not a terminal, y cuándo usar -T, -t, -tt o un comando para que desaparezca.
- SFTP: "subsystem request failed on channel 0" y "Connection closed"
sftp o scp dicen subsystem request failed on channel 0 y Connection closed. Falta la línea Subsystem sftp en el servidor. Cómo comprobarlo y arreglarlo.
- SSH "Too many authentication failures": cómo solucionarlo
Soluciona "Too many authentication failures" en SSH: tu agente ofrece demasiadas claves antes de la correcta. Usa IdentitiesOnly e IdentityFile para cada host.
- "Error opening terminal" y "unknown terminal type" por SSH: cómo solucionarlo
Soluciona Error opening terminal, 'xterm-256color': unknown terminal type y mensajes parecidos. Copia la entrada de terminfo al servidor o usa un TERM común.
- WARNING: UNPROTECTED PRIVATE KEY FILE: cómo arreglar los permisos
Soluciona el error de SSH "UNPROTECTED PRIVATE KEY FILE" y "bad permissions" con chmod 600, y revisa también ~/.ssh y StrictModes en el servidor.
Claves y acceso
Crear claves, entrar sin contraseña y resolver fallos de acceso.
- El archivo authorized_keys explicado
Cómo funciona el archivo authorized_keys de SSH: formato de línea, opciones, los permisos que exige sshd, AuthorizedKeysFile y qué línea gana si una clave se repite.
- Cómo convertir una clave .ppk a OpenSSH, y al revés
Convierte una clave .ppk a OpenSSH con un solo comando, y una clave OpenSSH a .ppk. Comandos en ambos sentidos, frase de contraseña y PPK versión 3.
- Cómo desactivar el acceso por contraseña en SSH
Desactiva el acceso por contraseña en SSH sin quedarte fuera: archivos drop-in que anulan sshd_config, KbdInteractive, UsePAM, sshd -T y cómo recargar con seguridad.
- Cómo usar una YubiKey o una clave FIDO2 con SSH (ed25519-sk)
Crea una clave SSH ed25519-sk en una YubiKey u otra clave FIDO2: claves residentes, verify-required, la versión de servidor y el problema del ssh de macOS.
- Cómo generar una clave SSH ed25519
Genera una clave SSH ed25519 con ssh-keygen, protégela con una frase de contraseña, cópiala a un servidor o a GitHub y prueba el acceso. macOS, Linux y Windows.
- Cómo añadir una clave SSH a GitHub
Añade una clave SSH a tu cuenta de GitHub: genérala, pega la clave pública en los ajustes, comprueba la huella del host con ssh -T y pasa un repositorio a SSH.
- Cómo solucionar "Permission denied (publickey)" en SSH
Solucionar el error SSH Permission denied (publickey): mira con ssh -v qué clave se ofrece, lee el log del servidor, instala la clave o corrige los permisos.
- Cómo recuperar una clave pública SSH a partir de la clave privada
¿Perdiste el archivo .pub? Usa ssh-keygen -y para recuperar la clave pública desde la privada y comprueba si un .pub corresponde de verdad a una privada.
- Claves SSH RSA o ed25519: ¿cuál deberías usar?
Usa ed25519 para claves SSH nuevas y RSA solo donde haga falta. Seguridad, tamaños, compatibilidad y cómo llegar a servidores antiguos, con comandos probados.
- Cómo añadir una clave SSH a ssh-agent y al Llavero de macOS
Deja de escribir la frase de contraseña de tu clave SSH en Mac: UseKeychain, AddKeysToAgent, ssh-add --apple-use-keychain, IdentitiesOnly y el reinicio.
- Autenticación con certificados SSH explicada
Configura certificados SSH con ssh-keygen -s: una CA, TrustedUserCAKeys, principals, validez, certificados de host, @cert-authority y revocar un certificado.
- Cómo usar las mismas claves SSH en varios ordenadores
SSH en portátil, sobremesa y móvil: una clave por dispositivo en authorized_keys, o una clave copiada con cuidado. Comandos, riesgos y qué hacer si pierdes uno.
Configuración y muchos servidores
Conexiones cortas de escribir y fáciles de mantener en orden.
- Cómo importar tu config SSH en un gestor de configuración SSH
Prepara ~/.ssh/config para importarlo: lista cada host, también de los archivos Include, revísalos con ssh -G, expórtalos a CSV y llévate claves y known_hosts.
- Cómo gestionar muchos servidores SSH
Ordena muchos servidores SSH: nombres, patrones Host, Include por proyecto, una clave por propósito, un inventario, known_hosts con hash y cuándo usar Ansible.
- Cómo usar varias cuentas de GitHub con SSH
Usa dos cuentas de GitHub en un mismo equipo: una clave cada una, alias Host en ~/.ssh/config, IdentitiesOnly e includeIf para commitear con el email correcto.
- Cómo guardar los comandos frecuentes de la terminal (snippets SSH)
Conserva los comandos que usas por SSH: un historial más largo, Ctrl-R con etiquetas, alias y funciones, RemoteCommand por host y lo que nunca debes guardar.
- El archivo de configuración de SSH, con ejemplos
Cómo funciona ~/.ssh/config, con ejemplos: patrones Host, por qué gana el primer valor, Include, Match y ssh -G para ver los ajustes que ssh usará de verdad.
- Multiplexación SSH con ControlMaster y ControlPersist
Reutiliza una conexión SSH en varias sesiones con ControlMaster, ControlPath y ControlPersist. Compruébala con -O check, ciérrala con -O exit, mira los límites.
Túneles y jump hosts
Llegar con seguridad a lo que hay detrás de un servidor.
- Cómo mantener un túnel SSH siempre activo con autossh y systemd
Un túnel SSH permanente con autossh y una unidad systemd con Restart=always, ServerAliveInterval y ExitOnForwardFailure, más una clave dedicada y restringida.
- Cómo conectarse a PostgreSQL o MySQL a través de un túnel SSH
Accede a una base de datos PostgreSQL o MySQL privada por un túnel SSH: comandos, puertos, direcciones de enlace, TLS y un usuario solo de túnel con PermitOpen.
- Jump host vs bastion host: ¿cuál es la diferencia?
Jump host vs bastion host: qué significa cada término, cómo pasan por ellos ProxyJump y ProxyCommand y qué convierte un jump host en un bastión de verdad.
- Cómo usar ProxyJump y un jump host en SSH
Llega a servidores privados con ssh -J y ProxyJump: varios saltos, por qué es más seguro que el agent forwarding y ProxyCommand para versiones viejas.
- Cómo configurar un túnel SSH inverso detrás de NAT
Accede a una máquina detrás de NAT ejecutando ssh -R hacia un servidor con dirección pública. Ejemplos probados, GatewayPorts y cómo mantenerlo privado.
- Cómo configurar un bastión SSH (bastion host)
Monta un bastión SSH que solo reenvíe a servidores elegidos: sshd con Match, AllowTcpForwarding, PermitOpen y ForceCommand, y después ProxyJump y registros.
- Cómo usar SSH como proxy SOCKS
Convierte cualquier servidor SSH en un proxy SOCKS con ssh -D 1080. Pruébalo con curl, configura un navegador, evita fugas de DNS y mantén el puerto privado.
- Gestor de túneles SSH: guardar, iniciar y detener reenvíos de puertos
Guarda túneles SSH en ~/.ssh/config con LocalForward, RemoteForward y DynamicForward, inícialos con ssh -f -N y detenlos de forma limpia con ssh -O exit.
- Túneles SSH explicados: reenvío de puertos local, remoto y dinámico
Reenvío de puertos SSH con ejemplos probados: túneles local -L, remoto -R y dinámico -D, varios puertos, jump host, ssh config, GatewayPorts y errores comunes.
- Cómo conectarse por SSH a un servidor sin IP pública o detrás de CGNAT
Cuatro formas de llegar a una máquina sin IPv4 pública o detrás de CGNAT: una VPN o red superpuesta, un túnel inverso, IPv6 y el reenvío de puertos del router.
Proteger un servidor
Reducir lo que un atacante puede intentar y lo que un error puede romper.
- Riesgos del reenvío del agente SSH (agent forwarding) y alternativas
Qué expone realmente ssh -A: root en el host remoto puede usar el socket de tu agente mientras estés conectado. Cómo reducen el riesgo ProxyJump y ssh-add -c.
- Cómo evitar ejecutar comandos en el servidor equivocado
Haz que producción se vea distinta con un prompt rojo, una barra de tmux y un color de terminal. Y protecciones para rm, simulacros y bracketed paste.
- Cómo cambiar el puerto SSH sin quedarte fuera del servidor
Cambia el puerto SSH en un orden seguro: firewall, SELinux, sshd_config, ssh.socket en Ubuntu reciente, y prueba antes de cerrar el puerto 22. Y qué protege.
- Cómo ver los intentos de inicio de sesión SSH en Linux
Consulta los accesos SSH fallidos y correctos con journalctl, auth.log, /var/log/secure, last, lastb y who. Qué significa cada línea del log y cuáles preocupan.
- Cómo desactivar el acceso de root por SSH
Pon PermitRootLogin no sin quedarte fuera: qué hace cada valor, por qué un archivo drop-in puede anular tu cambio y cómo comprobarlo con sshd -T.
- Cómo configurar fail2ban para SSH
Configura fail2ban para SSH: jail.local, la jail sshd, bantime, findtime, maxretry, el backend systemd, comprobar el estado, desbloquear y qué no detiene.
- Cómo endurecer sshd_config: una lista de comprobación que puedes probar
Endurece sshd_config paso a paso: acceso de root, contraseñas, AllowUsers, reenvíos y algoritmos, con sshd -t y sshd -T para no quedarte fuera del servidor.
- Cómo evitar un rm -rf accidental en servidores Linux
Protege un servidor Linux de un rm -rf accidental: rm -I y --preserve-root=all, safe-rm, controles en scripts, chattr +i, papelera, snapshots y recuperación.
- Cómo restringir una clave SSH a un solo comando o a una dirección
Limita una clave SSH con restrict, command=, from= y permitopen= en authorized_keys. Incluye SSH_ORIGINAL_COMMAND, un script envoltorio y fallos que encontramos.
- Cómo revocar una clave SSH cuando alguien se va
Encuentra por su huella la clave SSH de quien se va, elimínala, bloquéala con RevokedKeys y un KRL, cierra sus sesiones y usa certificados de corta vida.
- Cómo compartir acceso SSH sin compartir tu clave privada
Da acceso SSH a tus compañeros: una cuenta o clave por persona, caducidad, certificados cortos, retirada limpia y terminal compartida con tmux.
- Cómo añadir autenticación de dos factores a SSH con TOTP
Exige una clave SSH más un código TOTP con libpam-google-authenticator y AuthenticationMethods en Debian o Ubuntu, y conserva una vía de vuelta si algo sale mal.
- Cómo usar sudo por SSH sin filtrar tu contraseña
La contraseña escrita en el prompt de sudo con ssh -t va cifrada. Lo que se filtra es echo pass | sudo -S. Formas seguras de usar sudo en remoto con NOPASSWD.
- Cómo permitir SSH en ufw sin quedarte fuera
Permite SSH en ufw antes de activarlo: allow, limit, un puerto propio, una sola IP y una red de seguridad con temporizador para no quedarte sin acceso.
SSH en cada sistema
Activar y configurar SSH en el sistema que tengas.
- Cómo crear un usuario con acceso SSH y sudo
Crea un usuario Linux que entre con clave SSH y use sudo: adduser, el grupo sudo o wheel, y los permisos exactos de .ssh y del archivo authorized_keys.
- Cómo activar SSH en un Mac
Activa la sesión remota (Remote Login) en macOS desde Ajustes del Sistema o con systemsetup, limita quién entra y corrige el error de Acceso total al disco.
- Cómo activar SSH en una Raspberry Pi
Activa SSH en una Raspberry Pi con Imager, raspi-config, el escritorio o un archivo en la tarjeta SD, con configuración sin pantalla y cómo hallar la dirección.
- Cómo activar SSH en Ubuntu
Instala openssh-server en Ubuntu, arráncalo, abre el cortafuegos y prueba el acceso. Explica por qué ssh.service puede verse inactivo aunque SSH funcione.
- Cómo generar una clave SSH en Windows
Genera una clave SSH en Windows con ssh-keygen en PowerShell, inicia el servicio ssh-agent para escribir la frase una sola vez y copia la clave pública.
- Cómo instalar OpenSSH Server en Windows 11
Instala OpenSSH Server en Windows 11 con PowerShell: Add-WindowsCapability, el servicio sshd, la regla del firewall y administrators_authorized_keys.
- Consola serie en Mac con screen y /dev/tty.usbserial
Abrir una consola serie en Mac: encontrar el puerto /dev/cu.usbserial, conectar con screen o cu a la velocidad correcta, ajustar paridad y flujo, y salir de screen.
- ssh-copy-id en Windows: el comando de PowerShell que funciona
OpenSSH de Windows no trae ssh-copy-id. Esta línea de PowerShell hace lo mismo para servidores Linux, y hay un método aparte para servidores Windows.
- Cómo entrar por SSH en un contenedor Docker
Abrir un shell en un contenedor Docker con docker exec, en local o en un host remoto por SSH. Cómo solucionar los errores comunes y cuándo usar sshd dentro.
- telnet: command not found en Mac? Cómo usar Telnet en macOS
Por qué macOS no tiene el comando telnet, cómo probar un puerto con nc, cómo instalar telnet con Homebrew y cuándo switches y routers aún lo necesitan.
Sesiones y tmux
No perder el trabajo y controlar tus sesiones.
- Cómo mantener viva una sesión SSH tras desconectarte con tmux
Ejecuta tmux en el servidor y tu trabajo sobrevive a una conexión SSH caída. Crea, separa, une, lista y cierra sesiones, y alternativas con nohup y systemd-run.
- Mosh vs SSH: cuál es la diferencia
Mosh mantiene viva una terminal cuando cambia tu red, con los puertos UDP 60000 a 61000. En qué se diferencia de SSH, cómo instalarlo y qué no puede hacer.
- Cómo ejecutar un comando en varios servidores por SSH
Ejecuta un comando en varios servidores por SSH: un bucle, en paralelo con xargs y GNU parallel, parallel-ssh, tmux y cómo desplegar con seguridad.
- Cómo ejecutar un comando por SSH
Ejecuta comandos remotos con ssh user@server 'comando'. Comillas, heredocs, códigos de salida, por qué ssh en un bucle while se detiene y cuándo ayudan -n y -t.
- Cómo matar una sesión SSH congelada: secuencias de escape
Pulsa Enter, luego ~ y . para cerrar una sesión SSH congelada. Lista completa de secuencias de escape, ~C, ~^Z, sesiones anidadas y cómo cambiar el escape.
- Cómo grabar una sesión SSH en Linux
Graba una sesión SSH y reprodúcela: script, scriptreplay, asciinema, tlog en el servidor y registros de sudo. Y cómo evitar que se graben las contraseñas.
- Cheat sheet de tmux: comandos y atajos de teclado
Los comandos y atajos de tmux que se usan de verdad: sesiones, ventanas, paneles, modo copia, scripts y configuración. Probado en tmux 3.5a.
- tmux vs screen: cuál es la diferencia
tmux y GNU screen mantienen las sesiones de terminal en marcha cuando te desconectas. Comparación lado a lado de atajos, paneles, scripts y puertos serie.
- Cómo usar X11 forwarding (reenvío X11) por SSH
X11 forwarding por SSH: abre programas gráficos de Linux con ssh -X. Diferencia entre -X y -Y, qué necesita el servidor, XQuartz en Mac, errores y riesgos.
SFTP y transferencia de archivos
Mover archivos por SSH.
- Cómo editar archivos remotos por SSH
Editar un archivo en un servidor por SSH: nano o vim en la sesión, sudoedit, scp de ida y vuelta, vim scp://, sshfs o un editor con modo remoto.
- Cómo usar rsync por SSH
Sincroniza carpetas con rsync por SSH: -avz, la regla de la barra final, un puerto distinto con -e, reanudar con --partial y usar --dry-run antes de --delete.
- Ejemplos de scp: copiar archivos y carpetas por SSH
Ejemplos de scp probados: subir, descargar, copiar una carpeta con -r, otro puerto con -P, copiar entre dos servidores con -3 y cuándo hace falta la opción -O.
- scp, SFTP o rsync: cuál usar
Usa scp para una copia rápida, SFTP para explorar o reanudar y rsync para sincronizar carpetas y enviar solo los cambios. Ejemplos, barra final y puerto.
- Comandos de sftp: get, put, ls, lcd y modo por lotes
Los comandos de sftp que necesitas, probados: conectar, get, put, ls, lcd, reanudar con reget y automatizar con el modo por lotes -b y su regla de clave.
- Cómo montar una carpeta remota por SSH con sshfs
Monta una carpeta del servidor como si fuera local con sshfs. Comandos para montar y desmontar, reconnect y otras opciones, qué hacer si falla y macFUSE en Mac.
SSH desde el móvil
Qué hace falta para trabajar en un servidor desde el móvil.
- Cómo transferir archivos a un servidor con SFTP desde un iPhone
La app Archivos del iPhone no admite SFTP y necesitas otra app. Qué buscar en ella, qué debe ofrecer el servidor y cómo crear un usuario solo sftp con chroot.
- Cómo conectarte por SSH desde un teléfono Android
Qué necesitas para usar SSH desde Android: cómo juzgar un cliente, claves en el teléfono, por qué mueren las sesiones en segundo plano y OpenSSH en el móvil.
- Cómo conectarse por SSH desde un iPhone
Qué necesitas para usar SSH desde un iPhone: un servidor accesible, una clave creada para el móvil y tmux, porque iOS suspende las apps y la conexión se corta.
Vaults cifrados
Cómo funciona el cifrado y qué protege.
- Argon2id explicado: qué significan m, t y p y qué valores elegir
Argon2id hace que cada intento de contraseña cueste memoria. Qué son m, t y p, los valores de RFC 9106 y OWASP, y por qué supera a PBKDF2 frente a GPU.
- ¿Qué significa cifrado de extremo a extremo en un gestor de contraseñas?
Cifrado de extremo a extremo: tu dispositivo cifra tu gestor de contraseñas con claves que el servidor no tiene. Qué ve aún el servidor y qué preguntar.
- Gestor de contraseñas SSH: cómo guardar contraseñas SSH de forma segura
Dónde guardar las contraseñas SSH: primero las claves, los riesgos de sshpass -p, el Llavero de macOS y secret-tool para las que quedan, y qué debe hacer un gestor.