Cómo Conectarse a tu Servidor vía SSH
Secure Shell (SSH) es el protocolo fundamental para la administración remota segura de servidores, permitiendo a administradores de sistemas y desarrolladores conectarse a servidores Linux de forma segura a través de Internet. Esta guía completa te guiará a través de todo lo que necesitas saber sobre las conexiones SSH, desde la configuración básica hasta métodos de autenticación avanzados, asegurando que puedas establecer conexiones seguras y confiables a tus servidores.
Tabla de Contenidos
- Prerrequisitos
- Entendiendo el Protocolo SSH
- Paso 1: Instalando el Cliente SSH en tu Máquina Local
- Paso 2: Obteniendo los Detalles de Conexión de tu Servidor
- Paso 3: Conectando vía SSH con Autenticación por Contraseña
- Paso 4: Configurando la Autenticación con Clave SSH
- Paso 5: Configurando el Cliente SSH para Conexiones más Fáciles
- Paso 6: Opciones Avanzadas de Conexión SSH
- Verificación
- Solución de Problemas
- Mejores Prácticas
- Conclusión
- Recursos Adicionales
Prerrequisitos
Antes de conectarte a tu servidor vía SSH, asegúrate de tener:
- Un servidor Linux (VPS, servidor dedicado o instancia en la nube) con el servidor SSH instalado y en ejecución
- Dirección IP o nombre de host del servidor
- Credenciales de usuario válidas (nombre de usuario y contraseña o clave SSH)
- Cliente SSH instalado en tu máquina local (Linux, macOS o Windows)
- Conectividad de red entre tu máquina local y el servidor
- Puerto SSH del servidor abierto (predeterminado: 22)
- Conocimiento básico de línea de comandos
Entendiendo el Protocolo SSH
SSH (Secure Shell) es un protocolo de red criptográfico que proporciona comunicación segura sobre redes no seguras. A diferencia de protocolos antiguos como Telnet o FTP, SSH cifra todos los datos transmitidos entre tu computadora y el servidor, incluyendo contraseñas, comandos y salidas.
Características clave de SSH:
- Cifrado: Toda la comunicación está cifrada usando algoritmos criptográficos fuertes
- Autenticación: Admite múltiples métodos de autenticación (contraseña, clave pública, certificado)
- Integridad: Asegura que los datos no han sido alterados durante la transmisión
- Reenvío de puertos: Permite la tunelización segura de otros protocolos a través de SSH
- Transferencia de archivos: Habilita operaciones seguras de archivos vía SCP y SFTP
SSH opera en una arquitectura cliente-servidor. El servidor SSH (típicamente sshd) se ejecuta en tu servidor remoto, escuchando conexiones entrantes en el puerto 22 por defecto. El cliente SSH inicia la conexión desde tu máquina local.
Paso 1: Instalando el Cliente SSH en tu Máquina Local
El proceso de instalación varía dependiendo de tu sistema operativo.
Linux (Ubuntu/Debian)
La mayoría de las distribuciones Linux vienen con un cliente SSH preinstalado. Para verificar o instalar:
# Verificar si el cliente SSH está instalado
ssh -V
Si no está instalado, instala el cliente OpenSSH:
# Actualizar repositorio de paquetes
sudo apt update
# Instalar cliente OpenSSH
sudo apt install openssh-client -y
Linux (CentOS/Rocky Linux/RHEL)
# Verificar si el cliente SSH está instalado
ssh -V
# Instalar si es necesario
sudo dnf install openssh-clients -y
# O en versiones antiguas:
sudo yum install openssh-clients -y
macOS
macOS incluye el cliente OpenSSH por defecto. Puedes verificarlo abriendo Terminal y ejecutando:
# Verificar versión del cliente SSH
ssh -V
Windows
Windows 10 (versión 1809+) y Windows 11 incluyen el cliente OpenSSH por defecto. Para habilitarlo:
- Abre Configuración > Aplicaciones > Características Opcionales
- Busca "OpenSSH Client"
- Haz clic en "Instalar" si no está ya instalado
Alternativamente, puedes usar clientes SSH de terceros como PuTTY, MobaXterm o Windows Subsystem for Linux (WSL).
Para instalar PuTTY:
- Descarga PuTTY desde el sitio web oficial (https://www.putty.org/)
- Ejecuta el instalador
- Inicia PuTTY desde el menú Inicio
Paso 2: Obteniendo los Detalles de Conexión de tu Servidor
Antes de conectarte, reúne la siguiente información de tu proveedor de hosting o documentación del servidor:
- Dirección IP del Servidor: IPv4 (ej., 192.168.1.100) o dirección IPv6
- Nombre de usuario: La cuenta que usarás para iniciar sesión (comúnmente
root,ubuntu,admin, o nombre personalizado) - Puerto: Número de puerto SSH (el predeterminado es 22, pero puede ser personalizado por seguridad)
- Método de autenticación: Contraseña o ruta de clave SSH
La mayoría de los proveedores VPS envían esta información por correo electrónico cuando aprovisionas un nuevo servidor. Si estás usando plataformas en la nube como AWS, DigitalOcean o Linode, puedes encontrar estos detalles en tu panel de control.
Paso 3: Conectando vía SSH con Autenticación por Contraseña
El método más sencillo para conectarte a tu servidor es usando autenticación por contraseña.
Sintaxis Básica de Conexión SSH
# Comando estándar de conexión SSH
ssh username@server_ip_address
# Ejemplo con IP específica
ssh [email protected]
# Ejemplo con nombre de host
ssh [email protected]
# Especificar puerto personalizado
ssh -p 2222 username@server_ip_address
Cuando ejecutas este comando:
- El cliente SSH inicia una conexión al servidor
- En la primera conexión, verás un mensaje de verificación de huella digital
- Escribe
yespara aceptar y agregar el servidor a hosts conocidos - Ingresa tu contraseña cuando se te solicite
- Tras la autenticación exitosa, habrás iniciado sesión en el servidor remoto
Ejemplo de Primera Conexión
# Conexión por primera vez
ssh [email protected]
Verás un mensaje como:
The authenticity of host '203.0.113.10 (203.0.113.10)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Escribe yes y presiona Enter. Esto agrega la huella digital del servidor a ~/.ssh/known_hosts, previniendo ataques de intermediario en conexiones subsecuentes.
Por qué importa la verificación de huella digital: Esta medida de seguridad asegura que te estás conectando al servidor genuino y no a un impostor. Siempre verifica que la huella digital coincida con lo que tu proveedor de hosting muestra en su panel de control.
Conectando con Puerto Diferente
Si tu servidor SSH se ejecuta en un puerto no estándar:
# Conectar al servidor SSH en el puerto 2222
ssh -p 2222 username@server_ip_address
# Ejemplo
ssh -p 2222 [email protected]
La bandera -p especifica el número de puerto. Esto es común en entornos endurecidos de seguridad donde los administradores cambian el puerto predeterminado para reducir ataques automatizados.
Paso 4: Configurando la Autenticación con Clave SSH
La autenticación con clave SSH es más segura que la autenticación basada en contraseña y es el método recomendado para el acceso al servidor. Utiliza criptografía de clave pública para autenticar sin transmitir contraseñas.
Generando Par de Claves SSH
# Generar par de claves RSA (4096 bits para máxima seguridad)
ssh-keygen -t rsa -b 4096 -C "[email protected]"
# O generar clave Ed25519 (moderna, más segura, recomendada)
ssh-keygen -t ed25519 -C "[email protected]"
Cuando se te solicite:
- Ubicación del archivo: Presiona Enter para aceptar el predeterminado (
~/.ssh/id_rsao~/.ssh/id_ed25519) - Frase de contraseña: Ingresa una frase de contraseña fuerte para seguridad adicional (opcional pero recomendado)
Esto crea dos archivos:
- Clave privada:
~/.ssh/id_rsao~/.ssh/id_ed25519(nunca compartas esto) - Clave pública:
~/.ssh/id_rsa.pubo~/.ssh/id_ed25519.pub(seguro para compartir)
Por qué usar claves SSH: La autenticación basada en claves es inmune a ataques de fuerza bruta, no requiere escribir contraseñas y puede ser revocada fácilmente sin cambiar credenciales.
Copiando la Clave Pública al Servidor
Método 1: Usando ssh-copy-id (recomendado)
# Copiar clave pública al servidor
ssh-copy-id username@server_ip_address
# Con puerto personalizado
ssh-copy-id -p 2222 username@server_ip_address
# Con archivo de clave específico
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip_address
Este comando agrega automáticamente tu clave pública a ~/.ssh/authorized_keys en el servidor con los permisos correctos.
Método 2: Copia manual
Si ssh-copy-id no está disponible:
# Mostrar tu clave pública
cat ~/.ssh/id_rsa.pub
# Copia la salida, luego SSH al servidor y ejecuta:
mkdir -p ~/.ssh
echo "your_public_key_content_here" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Método 3: Enfoque de una línea
# Copiar clave usando cat y SSH
cat ~/.ssh/id_rsa.pub | ssh username@server_ip_address "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
Conectando con Clave SSH
Después de copiar tu clave pública:
# Conectar usando clave privada predeterminada
ssh username@server_ip_address
# Especificar clave privada personalizada
ssh -i ~/.ssh/custom_key username@server_ip_address
# Ejemplo con todas las opciones
ssh -i ~/.ssh/id_ed25519 -p 2222 [email protected]
Si estableciste una frase de contraseña en tu clave privada, se te pedirá ingresarla. Esto proporciona una capa adicional de seguridad.
Paso 5: Configurando el Cliente SSH para Conexiones más Fáciles
Crear un archivo de configuración SSH simplifica los comandos de conexión y almacena preferencias.
Creando Archivo de Configuración SSH
# Crear o editar archivo de configuración SSH
nano ~/.ssh/config
Agrega configuraciones de servidor:
# Configuración de servidor de producción
Host production
HostName 203.0.113.10
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
# Servidor de desarrollo con puerto personalizado
Host dev-server
HostName dev.example.com
User admin
Port 2222
IdentityFile ~/.ssh/dev_key
ForwardAgent yes
# Entorno de staging
Host staging
HostName 203.0.113.20
User deploy
IdentityFile ~/.ssh/staging_key
StrictHostKeyChecking ask
Establece permisos apropiados:
# Asegurar el archivo de configuración
chmod 600 ~/.ssh/config
Ahora puedes conectarte usando el alias del host:
# Conectar al servidor de producción
ssh production
# Conectar al servidor de desarrollo
ssh dev-server
# Conectar a staging
ssh staging
Opciones de configuración explicadas:
- Host: Nombre de alias para la conexión
- HostName: IP o dominio real del servidor
- User: Nombre de usuario predeterminado
- Port: Número de puerto SSH
- IdentityFile: Ruta a clave privada
- ServerAliveInterval: Envía paquetes keepalive cada N segundos
- ServerAliveCountMax: Número de paquetes keepalive antes de desconexión
- ForwardAgent: Permite usar claves SSH locales en servidor remoto
- StrictHostKeyChecking: Controla verificación de clave de host (ask, yes, no)
Paso 6: Opciones Avanzadas de Conexión SSH
Agente SSH para Gestión de Claves
El agente SSH almacena claves privadas en memoria, eliminando solicitudes repetidas de frase de contraseña:
# Iniciar agente SSH
eval "$(ssh-agent -s)"
# Agregar clave privada al agente
ssh-add ~/.ssh/id_ed25519
# Listar claves cargadas
ssh-add -l
# Eliminar todas las claves del agente
ssh-add -D
Multiplexación de Conexiones
Reutiliza conexiones SSH existentes para conexiones subsecuentes más rápidas:
# Agregar a ~/.ssh/config
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600
Crear directorio de sockets:
# Crear directorio para sockets de control
mkdir -p ~/.ssh/sockets
chmod 700 ~/.ssh/sockets
SSH con Ejecución de Comandos
Ejecuta comandos sin inicio de sesión interactivo:
# Ejecutar un solo comando
ssh username@server "uptime"
# Ejecutar múltiples comandos
ssh username@server "df -h && free -m"
# Ejecutar script en servidor remoto
ssh username@server 'bash -s' < local_script.sh
# Ejecutar comando con sudo
ssh username@server "sudo systemctl restart nginx"
Tunelización SSH (Reenvío de Puertos)
Reenvío de puerto local (acceder a servicio remoto localmente):
# Reenviar MySQL remoto al puerto local 3307
ssh -L 3307:localhost:3306 username@server
# Acceder a servicio web remoto localmente
ssh -L 8080:localhost:80 username@server
Reenvío de puerto remoto (exponer servicio local al remoto):
# Hacer servidor web local accesible desde servidor remoto
ssh -R 8080:localhost:80 username@server
Reenvío de puerto dinámico (proxy SOCKS):
# Crear proxy SOCKS en puerto 1080
ssh -D 1080 username@server
Modo Verboso para Depuración
Habilita salida verbosa para solucionar problemas de conexión:
# Modo verboso básico
ssh -v username@server
# Más verboso (nivel 2)
ssh -vv username@server
# Máxima verbosidad (nivel 3)
ssh -vvv username@server
Verificación
Después de establecer una conexión SSH, verifica que te has conectado exitosamente:
Verificar Usuario Actual y Nombre de Host
# Mostrar usuario actual
whoami
# Mostrar nombre de host
hostname
# Mostrar información completa del sistema
uname -a
# Mostrar quién está conectado
who
Verificar Detalles de Conexión
# Verificar variables de entorno SSH
echo $SSH_CONNECTION
echo $SSH_CLIENT
# Ver información de último inicio de sesión
last -a username
# Verificar sesiones SSH activas
w
Probar Permisos
# Verificar que puedes ejecutar comandos
ls -la /root
# Probar acceso sudo (si aplica)
sudo -v
Solución de Problemas
Conexión Rechazada
Problema: ssh: connect to host X.X.X.X port 22: Connection refused
Soluciones:
# Verificar que el servicio SSH está corriendo en el servidor (desde consola/panel del servidor)
sudo systemctl status sshd
# Iniciar servicio SSH si está detenido
sudo systemctl start sshd
# Habilitar SSH para iniciar en el arranque
sudo systemctl enable sshd
# Verificar si SSH está escuchando en el puerto correcto
sudo ss -tlnp | grep sshd
# Verificar que el firewall permite SSH
sudo ufw status
sudo firewall-cmd --list-all
Tiempo de Espera de Conexión Agotado
Problema: ssh: connect to host X.X.X.X port 22: Connection timed out
Soluciones:
- Verifica que la dirección IP del servidor es correcta
- Verifica si tu firewall bloquea el puerto 22 saliente
- Confirma que el firewall del servidor permite conexiones SSH entrantes
- Verifica que el servidor está en línea (prueba de ping)
- Verifica si tu ISP bloquea el puerto 22
# Probar conectividad al servidor
ping server_ip_address
# Probar si el puerto 22 está abierto
nc -zv server_ip_address 22
telnet server_ip_address 22
Permiso Denegado (Clave Pública)
Problema: Permission denied (publickey)
Soluciones:
# Verificar que la clave pública está en authorized_keys en el servidor
cat ~/.ssh/authorized_keys
# Verificar permisos en el servidor
ls -la ~/.ssh
# Debe ser: drwx------ (700) para directorio .ssh
# Debe ser: -rw------- (600) para archivo authorized_keys
# Corregir permisos en el servidor
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# Verificar que estás usando la clave privada correcta
ssh -i ~/.ssh/id_ed25519 -v username@server
# Verificar que el agente SSH tiene tu clave
ssh-add -l
Verificación de Clave de Host Fallida
Problema: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Soluciones:
# Eliminar clave de host antigua (solo si sabes que el servidor fue reinstalado)
ssh-keygen -R server_ip_address
# O editar manualmente known_hosts
nano ~/.ssh/known_hosts
# Eliminar la línea del servidor afectado
Advertencia de seguridad: Solo elimina claves de host si estás seguro de que el servidor fue legítimamente cambiado (reinstalado, IP reasignada). Esta advertencia podría indicar un ataque de intermediario.
Conexión SSH Lenta
Problema: La conexión SSH tarda 10-30 segundos en establecerse
Soluciones:
# Deshabilitar búsqueda DNS en el servidor (agregar a /etc/ssh/sshd_config)
UseDNS no
# Deshabilitar autenticación GSSAPI en el cliente
ssh -o GSSAPIAuthentication=no username@server
# Agregar a ~/.ssh/config para corrección permanente
Host *
GSSAPIAuthentication no
# Reiniciar servicio SSH después de cambios de configuración
sudo systemctl restart sshd
Mejores Prácticas
Recomendaciones de Seguridad
- Usa siempre autenticación con clave SSH en lugar de contraseñas
- Protege las claves privadas con frases de contraseña fuertes
- Usa claves separadas para diferentes servidores o propósitos
- Rota regularmente las claves SSH (anualmente o cuando empleados se van)
- Deshabilita el inicio de sesión root y usa sudo para tareas administrativas
- Cambia el puerto SSH predeterminado para reducir ataques automatizados
- Implementa fail2ban o herramientas similares para bloquear intentos de fuerza bruta
- Usa reglas de firewall para restringir acceso SSH a direcciones IP específicas
- Habilita autenticación de dos factores (2FA) para servidores críticos
- Mantén actualizados el cliente y servidor SSH para parchar vulnerabilidades
Seguridad de Configuración
Agrega estas configuraciones al /etc/ssh/sshd_config del servidor:
# Deshabilitar autenticación por contraseña (usar solo claves)
PasswordAuthentication no
# Deshabilitar inicio de sesión root
PermitRootLogin no
# Permitir solo usuarios específicos
AllowUsers admin deploy
# Usar solo protocolo 2
Protocol 2
# Reducir tiempo de gracia de inicio de sesión
LoginGraceTime 30
# Máximo de intentos de autenticación
MaxAuthTries 3
# Deshabilitar contraseñas vacías
PermitEmptyPasswords no
Consejos de Rendimiento
- Usa multiplexación de conexiones para acelerar múltiples conexiones
- Habilita compresión para conexiones lentas:
ssh -C username@server - Usa agente SSH para evitar entrada repetida de frase de contraseña
- Configura keep-alive para prevenir desconexiones:
ServerAliveInterval 60 - Limita opciones de cifrado a algoritmos más rápidos para redes confiables
Consejos de Mantenimiento
- Monitorea logs SSH regularmente:
sudo tail -f /var/log/auth.log - Audita archivos authorized_keys periódicamente en busca de claves no autorizadas
- Documenta configuraciones SSH para miembros del equipo
- Respalda claves privadas de forma segura (almacenamiento cifrado)
- Prueba acceso SSH después de cualquier cambio de servidor o firewall
- Usa control de versiones para archivos de configuración SSH
- Configura alertas para intentos de inicio de sesión fallidos
Gestión de Conexiones
# Establecer tiempo de espera de conexión en ~/.ssh/config
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
ConnectTimeout 10
# Usar multiplexación de conexiones
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 10m
Conclusión
SSH es la columna vertebral de la administración remota segura de servidores. Siguiendo esta guía completa, has aprendido cómo conectarte a tu servidor usando autenticación tanto por contraseña como basada en claves, configurar ajustes del cliente SSH para conveniencia e implementar mejores prácticas de seguridad.
Puntos clave:
- SSH proporciona comunicación cifrada y segura para acceso remoto a servidores
- La autenticación basada en claves es significativamente más segura que las contraseñas
- Los archivos de configuración SSH simplifican la gestión de conexiones para múltiples servidores
- Las auditorías de seguridad y actualizaciones regulares son esenciales para mantener el acceso seguro
- La multiplexación de conexiones y el agente SSH mejoran la eficiencia del flujo de trabajo
Ahora que has dominado las conexiones SSH, puedes proceder a la configuración inicial de seguridad del servidor, gestión de usuarios y otras tareas administrativas. Recuerda siempre priorizar la seguridad y seguir las mejores prácticas al gestionar el acceso al servidor.
Recursos Adicionales
- Documentación Oficial de OpenSSH
- SSH Academy - Guía Completa de SSH
- Tutorial SSH de DigitalOcean
- Guía de Configuración de Clave SSH de GitHub
- RFC 4253 del Protocolo SSH
- Directrices NIST para SSH
Guías Relacionadas
- Cómo Cambiar el Puerto SSH Predeterminado
- Gestión de Claves SSH: Generación y Mejores Prácticas
- Configuración Inicial de Seguridad en Ubuntu/Debian
- Cómo Configurar Usuarios y Permisos en Linux
- Configuración de Fail2Ban para Protección contra Fuerza Bruta


