15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
01.11.2024

SSH en Alojamiento Virtual: La Guía Completa para la Gestión Segura del Servidor

Secure Shell (SSH) es una de las herramientas más poderosas y esenciales en el arsenal de cualquier administrador de sistemas. Ya sea que estés gestionando un pequeño proyecto personal o ejecutando una aplicación web de producción, SSH te proporciona acceso remoto encriptado y autenticado a tu servidor — permitiéndote ejecutar comandos, transferir archivos y configurar servicios sin tocar nunca la máquina física.

Esta guía completa cubre todo lo que necesitas saber sobre trabajar con SSH en un entorno de alojamiento virtual: desde tu primera conexión hasta reforzar tu configuración contra ataques de fuerza bruta.

Tabla de Contenidos

  1. ¿Qué es SSH y por qué es importante?
  2. Requisitos previos antes de conectarte
  3. Cómo acceder a tu servidor a través de SSH
  4. Comandos SSH esenciales para la gestión del servidor
  5. Reforzando tu configuración SSH
  6. Autenticación por clave SSH: la forma correcta de iniciar sesión
  7. Transferencia segura de archivos con SCP y SFTP
  8. Consejos de solución de problemas de SSH
  9. Conclusión

1. ¿Qué es SSH y por qué es importante? {#what-is-ssh}

SSH (Secure Shell) es un protocolo de red criptográfico que crea un túnel encriptado entre tu máquina local (el cliente) y un servidor remoto. A diferencia de protocolos más antiguos como Telnet o FTP, SSH encripta todo el tráfico — incluyendo credenciales — haciendo prácticamente imposible que un atacante intercepte datos sensibles en tránsito.

SSH es el método estándar para:

  • Acceso remoto a la línea de comandos — ejecutar cualquier comando Linux/Unix en tu servidor como si estuvieras sentado frente a él
  • Transferencias de archivos seguras — mover archivos entre máquinas usando SCP o SFTP
  • Tunelización y reenvío de puertos — enrutar otros protocolos de forma segura a través de una conexión SSH
  • Despliegues automatizados y scripts — los pipelines CI/CD, trabajos cron y scripts de copia de seguridad dependen todos de SSH
  • Gestión de servidores web y aplicaciones — configurar Nginx, Apache, MySQL y más

Si estás ejecutando un plan de VPS Hosting o un Servidor Dedicado, SSH es casi con certeza tu interfaz principal para la administración diaria.

2. Requisitos previos antes de conectarte {#prerequisites}

Antes de establecer tu primera conexión SSH, asegúrate de tener lo siguiente:

RequisitoDetalles
Dirección IP del servidorProporcionada en tu panel de control de alojamiento o correo de bienvenida
Nombre de usuario SSHTípicamente root para un VPS nuevo, o un usuario personalizado en entornos gestionados
Contraseña o clave SSHEstablecida durante el aprovisionamiento o enviada por correo electrónico
Cliente SSHIntegrado en Linux/macOS; PuTTY o Windows Terminal en Windows
Puerto SSHEl predeterminado es 22, pero puede ser personalizado por seguridad

> Nota: Si estás en un plan de Alojamiento Web Compartido, el acceso SSH puede estar restringido o requerir activación explícita en tu panel de control. Consulta con tu proveedor.

3. Cómo acceder a tu servidor a través de SSH {#accessing-via-ssh}

Paso 1: Abre tu Terminal o cliente SSH

  • Linux / macOS: Abre la aplicación Terminal integrada
  • Windows 10/11: Usa Windows Terminal, PowerShell o Símbolo del sistema (todos incluyen un cliente SSH nativo)
  • Windows (heredado): Descarga PuTTY como cliente SSH gratuito

Paso 2: Conecta a tu servidor

Usa la siguiente sintaxis:

ssh username@your_server_ip

Ejemplo:

ssh root@203.0.113.45

Si tu servidor utiliza un puerto no estándar (más sobre por qué deberías cambiarlo después), especifícalo con la bandera -p:

ssh username@your_server_ip -p 2222

Paso 3: Verifica la huella digital del host

La primera vez que te conectes a un nuevo servidor, SSH mostrará un mensaje como este:

The authenticity of host '203.0.113.45 (203.0.113.45)' can't be established.
ED25519 key fingerprint is SHA256:abc123...
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Escribe yes y presiona Enter. SSH guardará la huella digital del servidor en tu archivo ~/.ssh/known_hosts. En futuras conexiones, verificará automáticamente la identidad del servidor — alertándote si algo cambia (lo que podría indicar un ataque de intermediario).

Paso 4: Autentica

Ingresa tu contraseña cuando se te solicite. Ten en cuenta que la terminal no mostrará ningún carácter mientras escribes — este es el comportamiento normal por razones de seguridad.

Una vez autenticado, verás el símbolo del sistema de tu servidor, típicamente algo como:

root@hostname:~#

Ahora estás conectado y puedes comenzar a gestionar tu servidor.

4. Comandos SSH esenciales para la gestión del servidor {#essential-commands}

Una vez conectado, tienes acceso completo a la línea de comandos Linux. Aquí están los comandos más importantes para gestionar un entorno de alojamiento virtual:

Operaciones de archivos y directorios

# List files and directories with details
ls -la

# Change to a specific directory
cd /var/www/html

# Create a new directory
mkdir my_project

# Remove a file
rm filename.txt

# Remove a directory and its contents
rm -rf /path/to/directory

# Copy a file
cp source.txt destination.txt

# Move or rename a file
mv oldname.txt newname.txt

Visualización y edición de archivos

# View file contents
cat /etc/nginx/nginx.conf

# View large files page by page
less /var/log/nginx/access.log

# Edit a file with nano (beginner-friendly)
nano /etc/ssh/sshd_config

# Edit a file with vim (advanced)
vim /etc/nginx/sites-available/default

Monitoreo del sistema

# Check disk usage (human-readable)
df -h

# Check memory usage
free -m

# Real-time process monitor
top

# Enhanced process monitor (install if needed)
htop

# Check running services
systemctl status nginx

# View recent system logs
journalctl -xe

Gestión de paquetes (Ubuntu/Debian)

# Update package list
sudo apt update

# Upgrade installed packages
sudo apt upgrade -y

# Install a package
sudo apt install package-name

# Remove a package
sudo apt remove package-name

Diagnósticos de red

# Check open ports and listening services
ss -tulnp

# Test connectivity to a host
ping google.com

# Trace the network route to a host
traceroute google.com

# Check your server's public IP
curl ifconfig.me

5. Reforzando tu configuración SSH {#hardening-ssh}

La configuración SSH predeterminada es funcional pero no óptimamente segura. Dado que SSH está expuesto a Internet, es un objetivo constante para ataques de fuerza bruta automatizados. Los siguientes pasos reducen significativamente tu superficie de ataque.

Todos los cambios se realizan en el archivo de configuración del demonio SSH:

sudo nano /etc/ssh/sshd_config

Después de hacer cualquier cambio, siempre recarga el servicio SSH:

sudo systemctl reload sshd

> ⚠️ Advertencia crítica: Antes de hacer cambios en la configuración SSH, siempre mantén abierta una segunda sesión de terminal conectada. Si configuras mal SSH y pierdes acceso, es posible que necesites usar la consola de emergencia de tu proveedor de alojamiento para recuperarte.

Paso 1: Cambia el puerto SSH predeterminado

El puerto 22 es el puerto SSH predeterminado y es constantemente escaneado por bots automatizados. Cambiarlo a un puerto alto y no estándar no detendrá a un atacante determinado, pero reduce dramáticamente el ruido de escaneos automatizados.

En /etc/ssh/sshd_config, encuentra y modifica:

# Before:
#Port 22

# After:
Port 2222

Elimina el # para descomentar la línea y establece tu puerto elegido (usa cualquier número entre 1024 y 65535 que no esté ya en uso).

Importante: Si estás ejecutando un firewall (y deberías hacerlo), permite el nuevo puerto antes de recargar SSH:

# UFW (Ubuntu/Debian)
sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp

# firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload

Paso 2: Deshabilita el inicio de sesión de root

Iniciar sesión directamente como root a través de SSH es un riesgo de seguridad significativo. En su lugar, crea una cuenta de usuario regular y usa sudo para tareas administrativas.

En /etc/ssh/sshd_config:

# Before:
PermitRootLogin yes

# After:
PermitRootLogin no

Antes de deshabilitar el inicio de sesión de root, asegúrate de tener:

  1. Creado un usuario no root: adduser myuser
  2. Otorgado privilegios sudo: usermod -aG sudo myuser
  3. Verificado que puedas iniciar sesión como ese usuario en una sesión separada

Paso 3: Limita los intentos de inicio de sesión

Añade estas directivas para reducir la efectividad de la fuerza bruta:

# Maximum authentication attempts per connection
MaxAuthTries 3

# Maximum concurrent unauthenticated connections
MaxStartups 10:30:60

# Disconnect idle sessions after 5 minutes
ClientAliveInterval 300
ClientAliveCountMax 2

Paso 4: Restringe el acceso SSH a usuarios específicos

Si solo ciertos usuarios necesitan acceso SSH, colócalos en la lista blanca explícitamente:

AllowUsers myuser deployuser

Paso 5: Deshabilita la autenticación por contraseña (después de configurar claves SSH)

Una vez que la autenticación por clave SSH esté configurada (ver la siguiente sección), deshabilita completamente el inicio de sesión basado en contraseña:

PasswordAuthentication no
ChallengeResponseAuthentication no

Este único cambio elimina toda la clase de ataques de fuerza bruta de contraseña.

6. Autenticación por clave SSH: la forma correcta de iniciar sesión {#ssh-key-authentication}

Las claves SSH son pares de claves criptográficas — una clave privada que permanece en tu máquina local y una clave pública que vive en el servidor. La autenticación funciona demostrando que posees la clave privada sin transmitirla nunca. Esto es mucho más seguro que las contraseñas.

Paso 1: Genera un par de claves SSH

Ejecuta esto en tu máquina local (no en el servidor):

ssh-keygen -t ed25519 -C "your_email@example.com"

> ¿Por qué Ed25519? Es más rápido y más seguro que el algoritmo RSA más antiguo. Si tu sistema no lo soporta, usa ssh-keygen -t rsa -b 4096 en su lugar.

Se te pedirá que:

  • Elijas una ubicación de archivo — presiona Enter para aceptar el predeterminado (~/.ssh/id_ed25519)
  • Establezca una frase de contraseña — altamente recomendado; esto encripta tu clave privada para que sea inútil si es robada

Esto crea dos archivos:

  • ~/.ssh/id_ed25519 — tu clave privada (nunca la compartas)
  • ~/.ssh/id_ed25519.pub — tu clave pública (esto va en el servidor)

Paso 2: Copia la clave pública a tu servidor

El método más fácil:

ssh-copy-id username@your_server_ip

O manualmente, si ssh-copy-id no está disponible:

# On your local machine, display your public key:
cat ~/.ssh/id_ed25519.pub

# On the server, add it to the authorized keys file:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "your_public_key_content" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Paso 3: Conecta usando tu clave SSH

# Standard port
ssh username@your_server_ip

# Custom port
ssh username@your_server_ip -p 2222

SSH utilizará automáticamente tu clave. Si estableciste una frase de contraseña, se te pedirá (esta es tu frase de contraseña local, no tu contraseña del servidor).

Paso 4: Simplifica las conexiones con un archivo de configuración SSH

Si gestionas múltiples servidores, crea un archivo de configuración SSH para evitar escribir comandos largos:

nano ~/.ssh/config

Añade entradas como esta:

Host myserver
    HostName 203.0.113.45
    User myuser
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Host staging
    HostName 203.0.113.100
    User deploy
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Ahora puedes conectarte simplemente con:

ssh myserver

7. Transferencia segura de archivos con SCP y SFTP {#file-transfers}

SSH permite dos métodos de transferencia de archivos seguros: SCP (Protocolo de copia segura) para transferencias rápidas y SFTP (Protocolo de transferencia de archivos SSH) para sesiones interactivas.

SCP — Transferencias rápidas de archivos

Copia un archivo de tu máquina local al servidor:

scp /path/to/local/file.txt username@your_server_ip:/path/to/remote/directory/

Copia un archivo del servidor a tu máquina local:

scp username@your_server_ip:/path/to/remote/file.txt /path/to/local/directory/

Copia un directorio completo recursivamente:

scp -r /path/to/local/folder username@your_server_ip:/path/to/remote/

Usando un puerto personalizado:

scp -P 2222 file.txt username@your_server_ip:/destination/

> Nota: SCP usa -P (mayúscula) para el puerto, a diferencia de SSH que usa -p (minúscula).

SFTP — Gestión interactiva de archivos

SFTP proporciona un shell interactivo para navegar y gestionar archivos remotos:

sftp username@your_server_ip

Una vez conectado, usa estos comandos:

# List remote files
ls

# List local files
lls

# Change remote directory
cd /var/www/html

# Change local directory
lcd ~/Downloads

# Upload a file
put localfile.txt

# Download a file
get remotefile.txt

# Exit
bye

Para un cliente SFTP gráfico, herramientas como FileZilla o Cyberduck se conectan a través de SFTP y proporcionan una interfaz de arrastrar y soltar — ideal si prefieres no usar la línea de comandos para la gestión de archivos.

8. Consejos de solución de problemas de SSH {#troubleshooting}

ProblemaCausa probableSolución
Connection refusedSSH no está ejecutándose, puerto incorrecto o firewall bloqueandoVerifica systemctl status sshd, verifica el puerto, comprueba las reglas del firewall
Connection timed outFirewall bloqueando la conexiónVerifica que las reglas del firewall permitan tu puerto SSH
Permission denied (publickey)Clave incorrecta, usuario incorrecto o clave no autorizadaComprueba los permisos de ~/.ssh/authorized_keys; verifica que se esté usando la clave correcta
Host key verification failedLa huella digital del servidor cambióElimina la entrada antigua: ssh-keygen -R your_server_ip
Too many authentication failuresSSH intentó demasiadas clavesEspecifica la clave explícitamente: ssh -i ~/.ssh/id_ed25519 user@host
Bloqueado después del cambio de configuraciónConfiguración incorrecta de SSHUsa la consola de emergencia/VNC de tu proveedor de alojamiento para arreglar sshd_config

Habilita el modo detallado para depuración

Al solucionar problemas de conexión, añade -v (o -vvv para máxima verbosidad) a tu comando SSH:

ssh -v username@your_server_ip

Esto genera información detallada sobre el proceso de apretón de manos, ayudándote a identificar exactamente dónde falla la conexión

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar