El cliente SSH en Linux es una herramienta esencial para conectarse de forma remota a otros equipos o servidores de manera segura. A través del protocolo SSH, es posible administrar sistemas, ejecutar comandos, transferir archivos y trabajar con servidores sin necesidad de estar físicamente delante de ellos.
En este artículo veremos qué es un cliente SSH, para qué se utiliza y cómo realizar conexiones remotas desde la terminal. También repasaremos conceptos básicos como usuario, dirección IP, puerto, autenticación y opciones habituales para trabajar de forma más cómoda y segura.
SSH (Secure Shell) es el estándar para conectarte de forma segura a máquinas remotas (Linux/Unix, routers, NAS, VPS, etc.). En esta guía nos centramos en el cliente SSH: cómo conectarte, usar claves SSH, organizar hosts en ~/.ssh/config, trabajar con ssh-agent, crear túneles y resolver errores comunes.
👉 Y recuerda, si quieres aprender más de Linux, pincha en este curso de Linux gratis
👉 También te dejo por aquí una guía de comandos Linux por categorías
Requisitos y conceptos básicos
- Cliente: tu ordenador (desde donde ejecutas ssh).
- Servidor: la máquina remota (a la que te conectas), normalmente con sshd.
En la mayoría de Linux y macOS, el cliente viene instalado (OpenSSH). En Windows 10/11 suele estar disponible como “OpenSSH Client”.
Comprobar e instalar el cliente SSH
Comprobar versión
En Linux/macOS:
ssh -VEn Windows (PowerShell):
ssh -VSi el comando no existe, instala OpenSSH desde tu gestor de paquetes (Linux) o habilita la característica “OpenSSH Client” (Windows).
Conexión básica
La forma más común:
ssh usuario@servidorEjemplos:
ssh [email protected]
ssh [email protected]Si el servidor escucha en un puerto distinto al 22:
ssh -p 2222 usuario@servidorConsejo: cuando empieces a tener varios servidores, usa ~/.ssh/config para no repetir opciones en cada comando.
Primera conexión y known_hosts
La primera vez que conectas, SSH te mostrará la huella (fingerprint) de la clave del servidor y te pedirá confirmación. Si aceptas, se guarda en el archivo known_hosts:
- Linux/macOS: ~/.ssh/known_hosts
- Windows: C:\\Users\\TU_USUARIO\\.ssh\\known_hosts
Esto ayuda a prevenir ataques de tipo man-in-the-middle en conexiones futuras.
Autenticación: contraseña vs claves SSH
Puedes autenticarte con:
- Contraseña: útil para salir del paso; peor para automatizar.
- Claves SSH: recomendado (más seguro y más cómodo, y facilita desactivar la contraseña en el servidor).
Generar una clave (recomendado: ed25519)
ssh-keygen -t ed25519 -C "[email protected]"Te pedirá dónde guardarla (por defecto ~/.ssh/id_ed25519) y una passphrase. Usar passphrase es buena práctica: si alguien obtiene tu clave privada, lo tendrá mucho más difícil.
Archivos típicos:
- ~/.ssh/id_ed25519 (privada, no se comparte)
- ~/.ssh/id_ed25519.pub (pública, se copia al servidor)
Copiar la clave pública al servidor
En Linux/macOS (si el servidor lo permite):
ssh-copy-id usuario@servidorCon puerto distinto:
ssh-copy-id -p 2222 usuario@servidorAlternativa manual (sin ssh-copy-id):
- Muestra tu clave pública:
cat ~/.ssh/id_ed25519.pub- En el servidor, añade ese contenido al final de ~/.ssh/authorized_keys.
- Asegura permisos correctos (en el servidor):
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysUsar una clave concreta al conectar
Si tienes varias claves o quieres especificar cuál usar:
ssh -i ~/.ssh/id_ed25519 usuario@servidor~/.ssh/config: alias y opciones por host
Cuando usas SSH a diario, ~/.ssh/config es el mayor upgrade: alias legibles, opciones por host, claves específicas, jump hosts, etc.
Ejemplo básico:
Host mi-vps
HostName 203.0.113.10
User kamil
Port 2222
IdentityFile ~/.ssh/id_ed25519Con eso conectas así:
ssh mi-vpsVarios hosts y patrones
Host *.lab
User ubuntu
IdentityFile ~/.ssh/id_ed25519
Host nas-casa
HostName 192.168.1.50
User adminOpciones útiles para el cliente SSH
- ServerAliveInterval 30 y ServerAliveCountMax 3: mantiene viva la sesión y detecta caídas.
- IdentitiesOnly yes: usa solo las claves indicadas (evita el error “Too many authentication failures”).
- ForwardAgent yes/no: reenvío del agente (útil, pero úsalo con cuidado).
- ProxyJump: saltar por un bastion/jump host.
Ejemplo con jump host:
Host bastion
HostName bastion.ejemplo.com
User kamil
Host db-interna
HostName 10.0.0.10
User ubuntu
ProxyJump bastionConexión:
ssh db-internassh-agent: gestionar passphrase
Si tu clave tiene passphrase, ssh-agent puede recordarla durante la sesión (o durante un tiempo, según tu entorno).
Cargar una clave en el agente:
ssh-add ~/.ssh/id_ed25519Ver claves cargadas:
ssh-add -lVaciar el agente:
ssh-add -DNota: en macOS, dependiendo de la versión y tu configuración, puedes integrar el agente con Keychain para mayor comodidad.
Túneles SSH (port forwarding)
Los túneles son uno de los superpoderes del cliente SSH: te permiten transportar puertos de forma segura.
Forward local (-L): traer un servicio remoto a tu máquina
Caso típico: en el servidor hay una base de datos escuchando solo en 127.0.0.1:5432, y quieres acceder desde tu PC sin exponerla a Internet.
ssh -L 5432:127.0.0.1:5432 usuario@servidorSi no quieres abrir una shell (solo el túnel):
ssh -N -L 5432:127.0.0.1:5432 usuario@servidorForward remoto (-R): exponer un puerto de tu máquina en el servidor
Útil para demos o debugging. Ejemplo: tu PC tiene un servicio en localhost:3000 y quieres que el servidor lo vea en su localhost:3000:
ssh -R 3000:127.0.0.1:3000 usuario@servidorOjo: el servidor debe permitir AllowTcpForwarding y, según el caso, GatewayPorts.
SOCKS proxy (-D): proxy dinámico
Esto crea un proxy SOCKS (útil para navegar redes internas “como si” estuvieras dentro):
ssh -D 1080 usuario@servidorLuego configura tu navegador/herramienta para usar SOCKS5 en 127.0.0.1:1080.
Copiar archivos: scp, sftp y rsync por SSH
Aunque el foco sea ssh, en la práctica vas a transferir archivos continuamente.
scp (copia simple)
Al servidor:
scp archivo.txt usuario@servidor:/ruta/destino/Desde el servidor:
scp usuario@servidor:/ruta/origen/archivo.txt .Con puerto distinto:
scp -P 2222 archivo.txt usuario@servidor:/ruta/destino/sftp (sesión interactiva)
sftp usuario@servidorSuele ser más cómodo para explorar y transferir varios archivos.
rsync por SSH
Sincronización incremental (solo copia cambios):
rsync -avz -e "ssh -p 2222" ./carpeta/ usuario@servidor:/ruta/carpeta/Seguridad y buenas prácticas (cliente)
- Usa claves ed25519 y una passphrase.
- Cuida permisos: ~/.ssh (700) y claves privadas (600).
- Evita ForwardAgent de forma global: actívalo solo cuando lo necesites.
- Verifica fingerprints en entornos críticos (mejor por un canal secundario).
- Si ya usas claves, considera desactivar contraseña en el servidor (mejora tu seguridad global).
Troubleshooting: errores típicos
Permission denied (publickey)
El servidor no aceptó tu clave (o no ofreciste la correcta). Checklist:
- ¿Usuario correcto?
- ¿La pública está en ~/.ssh/authorized_keys del usuario del servidor?
- ¿Permisos correctos en el servidor?
- ¿Estás usando el IdentityFile correcto?
Para ver qué pasa, usa modo verboso:
ssh -v usuario@servidorMás detalle:
ssh -vvv usuario@servidorREMOTE HOST IDENTIFICATION HAS CHANGED!
La clave del servidor cambió respecto a known_hosts. Puede ser normal (reinstalación) o peligroso (MITM). Si ya has verificado que el cambio es legítimo, borra la entrada antigua:
ssh-keygen -R servidorEjemplo:
ssh-keygen -R 203.0.113.10Vuelve a conectar para aceptar la nueva huella.
Connection timed out / No route to host
Suele ser red, firewall o DNS. Revisa:
- IP correcta
- Puerto correcto (opción -p)
- Firewall bloqueando
- Servidor caído
Puedes probar conectividad al puerto (si tienes nc/netcat):
nc -vz servidor 22Too many authentication failures
El cliente intenta demasiadas claves (por el agente) y el servidor corta. Soluciones típicas:
- Especifica clave con -i.
- En ~/.ssh/config, añade IdentitiesOnly yes e IdentityFile con la clave correcta.
Host mi-vps
IdentitiesOnly yes
IdentityFile ~/.ssh/id_ed25519Chuleta rápida
ssh usuario@host
ssh -p 2222 usuario@host
ssh -i ~/.ssh/id_ed25519 usuario@host
ssh -N -L 5432:127.0.0.1:5432 usuario@host
ssh -D 1080 usuario@host
ssh -vvv usuario@host
ssh-keygen -t ed25519 -C "email"
ssh-copy-id usuario@host
ssh-add ~/.ssh/id_ed25519Conclusión
El cliente SSH es una de las herramientas más importantes para cualquier usuario o administrador que trabaje con Linux. Permite acceder a servidores remotos de forma segura, ejecutar tareas de administración y gestionar sistemas desde cualquier lugar.
Comprender cómo funciona SSH, cómo conectarse a un servidor y cómo usar opciones básicas ayuda a mejorar la productividad y la seguridad en entornos Linux. Dominar el cliente SSH es un paso fundamental para avanzar en administración de sistemas, servidores, redes, DevOps y ciberseguridad.
