Cómo conectarse por SSH: guía práctica para acceder a servidores Linux
Aprende a conectarte por SSH a servidores Linux de forma segura: claves, configuración del cliente, solución de errores y buenas prácticas para entornos de producción.
SSH (Secure Shell) es el protocolo estándar para administrar servidores Linux remotos. Si acabas de aprovisionar una VPS o recibiste credenciales de acceso a un servidor, el primer paso es abrir una sesión SSH — todo lo demás (despliegue, instalación de paquetes, configuración de servicios) depende de que esto funcione.
Este tutorial cubre el camino completo: conexión inicial con contraseña, generación y uso de claves SSH, configuración del archivo ~/.ssh/config para simplificar comandos repetitivos, y resolución de los errores más comunes que aparecen en el primer acceso. El foco es el uso práctico en entornos Linux y macOS, con observaciones puntuales para Windows mediante OpenSSH nativo o WSL.
Tiempo estimado de ejecución: 15 a 25 minutos, incluyendo generación de claves y ajustes de configuración.
Requisitos previos
Antes de intentar la conexión, confirma que tienes los datos de acceso del servidor y un cliente SSH disponible en tu máquina local.
Un servidor con SSH habilitado (puerto 22 por defecto, abierto en el firewall), credenciales de acceso (usuario + contraseña o clave) y un terminal con cliente OpenSSH instalado. En Linux y macOS ya viene por defecto. En Windows 10/11, el cliente OpenSSH está disponible en Configuración → Aplicaciones → Características opcionales.
Los datos típicos que recibes al contratar una VPS son:
203.0.113.42 root 22 enviada por correo electrónico Guarda estos valores — los usarás en los próximos pasos. Si la contraseña llegó por correo en texto plano, considera cambiarla en la primera conexión.
Primera conexión con contraseña
El comando ssh sigue el formato ssh usuario@host -p puerto. Para una conexión básica con las credenciales del ejemplo anterior:
Abre el terminal local y ejecuta:
ssh [email protected]Si el puerto es distinto de 22, añade -p:
ssh [email protected] -p 2222En la primera conexión, el cliente mostrará la huella digital del host:
The authenticity of host '203.0.113.42 (203.0.113.42)' can't be established.
ED25519 key fingerprint is SHA256:abc123...
Are you sure you want to continue connecting (yes/no/[fingerprint])?Escribe yes y pulsa Enter. Esta huella digital queda guardada en ~/.ssh/known_hosts y protege contra ataques man-in-the-middle en conexiones futuras.
Escribe la contraseña cuando se solicite. El terminal no muestra caracteres mientras escribes — es el comportamiento normal, no un error.
Tras autenticarte, verás el prompt del servidor:
root@servidor:~#Listo, estás dentro. Para cerrar la sesión, escribe exit o pulsa Ctrl+D.
El acceso con contraseña es aceptable para el primer inicio de sesión, pero no para el uso habitual. Las contraseñas son vulnerables a fuerza bruta — cualquier servidor con SSH expuesto en internet recibe miles de intentos al día. Configura autenticación por clave (siguiente sección) y deshabilita la contraseña en cuanto puedas.
Autenticación por clave SSH
Las claves SSH usan criptografía asimétrica: generas un par (clave privada + clave pública), guardas la privada en tu máquina local y envías la pública al servidor. La autenticación ocurre sin transmitir nunca secretos por la red.
Generar el par de claves
En tu máquina local, genera una clave ED25519 (algoritmo moderno, más rápido que RSA y considerado seguro):
ssh-keygen -t ed25519 -C "[email protected]"El comando pregunta dónde guardar la clave (por defecto: ~/.ssh/id_ed25519) y solicita una frase de contraseña opcional. La frase de contraseña cifra la clave privada en disco — recomendado, especialmente en portátiles.
El resultado son dos archivos:
~/.ssh/id_ed25519— clave privada (nunca la compartas)~/.ssh/id_ed25519.pub— clave pública (esta va al servidor)
Copia la clave pública al servidor usando ssh-copy-id:
ssh-copy-id [email protected]Escribe la contraseña del servidor (por última vez). El comando añade tu clave pública en ~/.ssh/authorized_keys en el servidor remoto, creando el archivo si no existe y ajustando los permisos correctamente.
Si ssh-copy-id no está disponible (caso habitual en Windows), hazlo manualmente:
cat ~/.ssh/id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"Prueba la conexión sin contraseña:
ssh [email protected]Esta vez entras directamente, o solo se solicita la frase de contraseña de la clave privada (si definiste una). La contraseña del servidor ya no se usa en esta autenticación.
Configurando ~/.ssh/config
Escribir ssh [email protected] -p 2222 -i ~/.ssh/clave_especifica cada vez resulta tedioso. El archivo ~/.ssh/config permite crear alias por servidor.
Crea o edita el archivo:
nano ~/.ssh/configAñade un bloque por servidor:
Host produccion
HostName 203.0.113.42
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
Host staging
HostName 198.51.100.10
User deploy
Port 2222
IdentityFile ~/.ssh/id_stagingAjusta los permisos:
chmod 600 ~/.ssh/configAhora la conexión es simplemente:
ssh produccionEl cliente lee el config, resuelve el alias y aplica todos los parámetros. Funciona también con scp, rsync y herramientas que dependen del cliente SSH (como git con remotes SSH).
Añade ControlMaster auto, ControlPath ~/.ssh/sockets/%r@%h:%p y ControlPersist 10m al inicio del ~/.ssh/config (bloque Host *) para multiplexar conexiones. La segunda sesión SSH al mismo servidor se abre de forma instantánea, reutilizando el túnel de la primera.
Reforzando el acceso SSH
Con la clave funcionando, el siguiente paso es cerrar el acceso por contraseña y ajustar el servicio SSH en el servidor.
Conectado al servidor, edita la configuración del servicio SSH:
sudo nano /etc/ssh/sshd_configAjusta (o descomenta) estas líneas:
PasswordAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yesprohibit-password permite acceso root por clave pero bloquea contraseña — útil en VPS donde el usuario inicial es root. Si creaste un usuario no-root con sudo, prefiere PermitRootLogin no.
Valida la sintaxis antes de recargar:
sudo sshd -tSi no hay salida, está correcto. Aplica los cambios:
sudo systemctl reload sshNo cierres el terminal actual antes de probar una NUEVA conexión SSH en otro terminal. Si cometes un error en sshd_config y cierras la sesión activa, puedes quedarte sin acceso al servidor. Prueba siempre con una sesión paralela.
Verificación
Confirma que todo funciona como se espera:
ssh -v produccion
El modo verbose (-v) muestra cada etapa: lectura del config, negociación de algoritmos, oferta de claves. Busca:
debug1: Authentication succeeded (publickey).
Esto confirma que la autenticación se realizó por clave, no por contraseña. Si aparece password, algo no se ha aplicado correctamente.
Desde el servidor, verifica los intentos recientes:
sudo journalctl -u ssh --since "10 minutes ago"
Verás líneas del tipo Accepted publickey for root from ... port ... ssh2.
Resolución de problemas
Permission denied (publickey)
La clave pública no está en ~/.ssh/authorized_keys en el servidor, o los permisos son incorrectos. En el servidor:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Verifica también que el cliente esté ofreciendo la clave correspondiente — usa ssh -v y busca Offering public key.
Connection refused
El servicio SSH no está en ejecución, o el firewall bloquea el puerto. En el servidor:
sudo systemctl status ssh
sudo ss -tlnp | grep ssh
Si está activo, revisa el firewall (sudo ufw status o las reglas del proveedor).
Connection timed out
Generalmente es un problema de red o IP incorrecta. Prueba la conectividad básica:
ping 203.0.113.42
nc -zv 203.0.113.42 22
Si nc falla pero ping funciona, el puerto está bloqueado en algún punto del camino.
Host key verification failed
La huella digital del servidor cambió desde la última conexión (servidor reinstalado, IP reciclada). Elimina la entrada antigua:
ssh-keygen -R 203.0.113.42
Y vuelve a conectarte — el cliente pedirá confirmación de la nueva huella digital.
Próximos pasos
Con SSH funcionando de forma segura, el servidor está listo para trabajo real. Algunas direcciones para profundizar:
- Configura
fail2banpara bloquear IPs con intentos excesivos de autenticación. - Usa
moshen conexiones inestables (móvil, Wi-Fi deficiente) — mantiene la sesión activa incluso con cambios de red. - Aprende port forwarding (
ssh -Lyssh -R) para acceder a servicios internos del servidor sin exponerlos a internet. - Configura
ssh-agentpara introducir la frase de contraseña una sola vez por sesión de trabajo. - Estudia los bloques
Matchensshd_configpara aplicar políticas distintas por usuario o red.
Si estás poniendo un proyecto en producción y quieres evitar problemas con SSH y firewall mal configurados, una VPS Hostini ya viene con SSH habilitado, IPv4 dedicado y acceso root inmediato — solo tienes que seguir los pasos de este tutorial a partir del correo de aprovisionamiento.
Preguntas frecuentes
¿Cuál es la diferencia entre una clave RSA y una ED25519?
ED25519 es un algoritmo más reciente basado en curvas elípticas. Genera claves más pequeñas (unos 68 caracteres frente a los 400+ de RSA), es más rápido en firma y verificación, y se considera seguro frente a los ataques conocidos. Usa ED25519 por defecto; recurre a RSA-4096 solo si el servidor es muy antiguo y no lo soporta.
¿Puedo usar la misma clave SSH en varios servidores?
Sí, la clave pública puede copiarse a tantos servidores como quieras — así es como la mayoría de las personas la utiliza. La clave privada se queda solo en tu máquina. No obstante, considera usar claves separadas para contextos sensibles (producción vs. personal) para limitar el impacto en caso de que una se vea comprometida.
¿Cómo conectarse por SSH en Windows sin instalar PuTTY?
Windows 10 y 11 incluyen el cliente OpenSSH nativo. Abre PowerShell o CMD y usa los mismos comandos `ssh`, `ssh-keygen` y `ssh-copy-id` que en Linux. Si no está disponible, actívalo en Configuración → Aplicaciones → Características opcionales → Cliente OpenSSH. WSL también es una alternativa robusta.
¿Qué hacer si olvido la frase de contraseña de la clave privada?
No hay forma de recuperarla. La frase de contraseña cifra el archivo de la clave privada en disco y no tiene mecanismo de restablecimiento. Debes generar un nuevo par de claves y actualizar `authorized_keys` en todos los servidores donde estaba autorizada la clave anterior. Por eso muchos desarrolladores usan `ssh-agent` para introducir la frase de contraseña una sola vez por sesión.
¿Es seguro mantener el puerto SSH en el 22?
Sí, siempre que deshabilites la autenticación por contraseña y uses claves. Cambiar a otro puerto (seguridad por oscuridad) reduce el ruido en los registros de intentos automatizados, pero no añade seguridad real frente a atacantes dirigidos. El beneficio efectivo proviene de claves robustas, fail2ban y usuarios no-root.
¿Cómo mantener la conexión SSH abierta sin que se desconecte por inactividad?
Añade `ServerAliveInterval 60` en el `~/.ssh/config` del cliente — envía un keepalive cada 60 segundos. En el lado del servidor, `ClientAliveInterval 60` y `ClientAliveCountMax 3` en `/etc/ssh/sshd_config` tienen un efecto equivalente. Esto evita desconexiones por NAT timeout en conexiones domésticas.