Dominando SSH: Su guía esencial de línea de comandos

Aprende comandos prácticos de SSH para inicio de sesión, claves, transferencia de archivos, reenvío de puertos y configuración de host reutilizable.

Dominando SSH: Tu Guía Esencial de Línea de Comandos

El protocolo Secure Shell (SSH) te proporciona una forma cifrada de iniciar sesión en sistemas remotos, ejecutar comandos y mover archivos. Si administras servidores, algunos hábitos de línea de comandos SSH hacen tu trabajo más rápido y seguro.

Esta guía cubre los comandos que usarás con más frecuencia: inicio de sesión remoto, autenticación con claves, scp, sftp, reenvío de puertos local y alias de ~/.ssh/config.

Estableciendo un Inicio de Sesión Remoto Seguro

El uso más frecuente de SSH es asegurar una conexión de terminal a un servidor remoto. La sintaxis básica es sencilla, pero hay opciones cruciales para una mayor seguridad y usabilidad.

Sintaxis Básica de Conexión

El comando estándar requiere especificar el usuario remoto y la dirección del host (IP o nombre de dominio):

ssh [usuario]@[host]
# Ejemplo:
ssh [email protected]

Especificando un Puerto No Estándar

Por razones de seguridad, muchos administradores cambian el puerto SSH predeterminado (Puerto 22). Usa la bandera -p para especificar un número de puerto diferente:

ssh -p 2222 [email protected]

Ejecutando Comandos Remotos Individuales

SSH no se limita a abrir un shell interactivo. Puedes ejecutar un solo comando en el servidor remoto y obtener la salida localmente, lo cual es extremadamente útil para scripts y verificaciones rápidas.

# Ejecuta 'ls -l' en el directorio /var/log del servidor remoto
ssh usuario@host 'ls -l /var/log'

# Verifica el tiempo de actividad del servidor
ssh usuario@host uptime

Gestionando la Autenticación con Claves SSH

La autenticación por contraseña a menudo está expuesta a ataques de fuerza bruta. Las claves SSH utilizan una clave privada en tu máquina y una clave pública en el servidor remoto, para que el servidor pueda verificarte sin recibir tu contraseña.

Generando Pares de Claves

Si aún no tienes un par de claves, puedes generar uno usando ssh-keygen. Es una buena práctica usar una frase de contraseña sólida para proteger tu clave privada.

ssh-keygen -t ed25519 -C "[email protected]"

Las claves RSA siguen siendo comunes, especialmente en sistemas más antiguos. Para una clave nueva en una configuración moderna de OpenSSH, Ed25519 suele ser la opción predeterminada más simple.

Copiando la Clave Pública al Servidor

La utilidad ssh-copy-id es la forma más sencilla de instalar tu clave pública local en el archivo ~/.ssh/authorized_keys del usuario remoto. Normalmente ingresas tu contraseña una vez, y luego los inicios de sesión futuros pueden usar la clave.

# Copia tu clave pública predeterminada al servidor y establece permisos comunes
ssh-copy-id usuario@host

Consejo: Usando la Clave Privada Si tu clave privada no está en la ubicación predeterminada (~/.ssh/id_rsa), debes usar la bandera -i para especificar su ruta al conectarte:

ssh -i ~/.ssh/mi_clave_personalizada usuario@host

Transferencias Seguras de Archivos

SSH proporciona dos herramientas principales para la transferencia segura de archivos: scp (Copia Segura) y sftp (Protocolo de Transferencia Segura de Archivos).

A. Usando Copia Segura (scp)

scp es ideal para transferencias de archivos simples, rápidas y únicas, ofreciendo una interfaz de línea de comandos modelada según el comando estándar de Unix cp (copiar).

Transfiriendo Archivos de Local a Remoto

# Sintaxis: scp [archivo_local] [usuario]@[host]:/[ruta_remota]
scp deployment.tar.gz usuario@webserver:/var/www/uploads/

Transfiriendo Archivos de Remoto a Local

# Sintaxis: scp [usuario]@[host]:/[archivo_remoto] [ruta_local]
scp usuario@dbserver:/var/log/backup.sql .

Copiando Directorios de Forma Recursiva

Usa la bandera -r para copiar estructuras de directorios completas.

scp -r ~/project_files/ usuario@buildserver:/home/user/builds/

B. Usando el Protocolo de Transferencia Segura de Archivos (sftp)

sftp establece una sesión interactiva, similar a un cliente FTP tradicional, pero asegurada a través de SSH. Es más adecuado para navegar por directorios remotos, listar archivos y realizar múltiples transferencias dentro de una sola sesión.

Iniciando una Sesión sftp

sftp usuario@host

Comunes Comandos de Sesión sftp

Comando Descripción
ls Listar archivos remotos
lls Listar archivos locales
get nombre_archivo Descargar un archivo del servidor remoto
put nombre_archivo Subir un archivo al servidor remoto
cd /ruta/ Cambiar directorio remoto
lcd /ruta/ Cambiar directorio local
quit Salir de la sesión sftp

Tunelización SSH con Reenvío de Puertos Local

La tunelización SSH, o reenvío de puertos, te permite cifrar conexiones para protocolos no seguros o acceder a servicios en una red interna a través de un host de salto. La forma más común es el Reenvío de Puertos Local.

Reenvío de Puertos Local (-L)

El reenvío local dirige el tráfico desde un puerto en tu máquina local a un puerto especificado en un host remoto a través del servidor SSH. Esto es útil para acceder a bases de datos internas, interfaces web o servicios propietarios que no están expuestos directamente a Internet pública.

Escenario: Quieres acceder a un servidor web interno privado (accesible solo desde jumpbox) en el puerto 80.

# Sintaxis: ssh -L [puerto_local]:[host_destino]:[puerto_destino] [usuario]@[jumpbox]
ssh -L 8080:internal-web.lan:80 usuario@jumpbox -N
  • -L 8080:internal-web.lan:80: El tráfico que llega a tu máquina local en el puerto 8080 se reenvía a internal-web.lan en el puerto 80, a través de jumpbox.
  • -N: Le dice a SSH que no ejecute un comando remoto; simplemente configura el túnel.

Una vez establecida la conexión, puedes acceder al sitio interno navegando en tu navegador local a http://localhost:8080.

Mejorando la Eficiencia con el Archivo de Configuración SSH

Escribir manualmente comandos SSH complejos, incluyendo puertos personalizados, nombres de usuario y rutas de claves, es ineficiente. El archivo de configuración SSH (~/.ssh/config) te permite definir alias y configuraciones para servidores a los que accedes con frecuencia.

Ejemplo de Configuración (~/.ssh/config)

Crea o edita el archivo ~/.ssh/config con la siguiente estructura:

# Servidor 1: Clave estándar, puerto no estándar
Host dev-web
    HostName 10.0.0.50
    User usuario_despliegue
    Port 2222
    IdentityFile ~/.ssh/id_rsa_dev

# Servidor 2: Acceso a través de jumpbox que requiere autenticación con clave
Host production-db
    HostName 10.0.20.15
    User sysadmin
    IdentityFile ~/.ssh/prod_key
    LocalForward 54320 127.0.0.1:5432

En ese segundo ejemplo, ssh production-db abre un puerto local en tu estación de trabajo. Luego puedes apuntar un cliente PostgreSQL a localhost:54320, y SSH transporta el tráfico a 127.0.0.1:5432 tal como se ve desde el host remoto.

Conectándose con Alias

Una vez configurado, conectarse se vuelve dramáticamente más simple:

# Se conecta a 10.0.0.50 en el puerto 2222 como usuario_despliegue
ssh dev-web

# Se conecta y configura automáticamente el reenvío de puertos (si está configurado)
ssh production-db

Conclusión Clave

Comienza con ssh usuario@host, agrega autenticación basada en claves y mueve las opciones repetidas a ~/.ssh/config. Una vez que esos conceptos básicos sean sólidos, el reenvío local con ssh -L te brinda una forma controlada de alcanzar servicios privados sin exponerlos directamente a la red.