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-ipara 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 ainternal-web.lanen el puerto 80, a través dejumpbox.-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.