Comandos Esenciales de SSH para Administradores de Sistemas

Domine los comandos SSH esenciales para administradores de sistemas con esta guía completa. Aprenda a conectarse de forma segura a servidores remotos, gestionar configuraciones y realizar transferencias de archivos eficientes utilizando `scp` y `sftp`. Profundice en temas avanzados como el reenvío de puertos local, remoto y dinámico (túnel SSH) para asegurar y optimizar el acceso a la red. Ejemplos prácticos, consejos sobre autenticación basada en claves, `ssh-agent` y pasos para la resolución de problemas le permitirán gestionar su infraestructura con confianza y mejorar su eficiencia en la administración remota.

43 vistas

Comandos SSH Esenciales para Administradores de Sistemas

Introducción

Secure Shell (SSH) es la base de la administración remota segura para servidores y dispositivos de red. Para los administradores de sistemas, dominar SSH no es solo una habilidad, sino una necesidad fundamental para gestionar la infraestructura de manera eficiente y segura. SSH proporciona un canal seguro a través de una red no segura utilizando un cifrado sólido, asegurando que todas las comunicaciones, incluidas contraseñas, comandos y transferencias de archivos, permanezcan confidenciales y protegidas del espionaje.

Este artículo sirve como una guía completa de los comandos y conceptos SSH más esenciales que todo administrador de sistemas debe conocer. Profundizaremos en todo, desde los métodos básicos de conexión y las transferencias seguras de archivos hasta técnicas avanzadas como el reenvío de puertos y las conexiones persistentes. Al comprender e implementar estos comandos y las mejores prácticas, puede mejorar significativamente sus capacidades de administración remota de servidores, optimizar los flujos de trabajo y mantener una postura de seguridad robusta en todos sus entornos.

Establecimiento de Conexiones SSH Básicas

El uso más fundamental de SSH es establecer una sesión de shell interactiva y segura con un servidor remoto. La sintaxis básica es sencilla, lo que le permite especificar el usuario y el host de destino.

Conexión a un Servidor Remoto

Para conectarse a un servidor remoto utilizando su nombre de usuario local actual:

ssh hostname_or_IP_address

Si su nombre de usuario en el servidor remoto es diferente de su nombre de usuario local, debe especificarlo:

ssh username@hostname_or_IP_address

Ejemplo:

ssh [email protected]
ssh [email protected]

Especificación de un Puerto Personalizado

Por defecto, SSH utiliza el puerto 22. Sin embargo, por razones de seguridad o configuraciones de red específicas, los servidores a menudo escuchan en un puerto diferente. Puede especificar un puerto personalizado utilizando la bandera -p:

ssh -p 2222 username@hostname_or_IP_address

Consejo: Cambiar el puerto SSH predeterminado (puerto 22) es una práctica de seguridad común para reducir los intentos de ataque automatizados, aunque no reemplaza la autenticación sólida.

Autenticación Basada en Claves SSH

Aunque la autenticación por contraseña es común, la autenticación basada en claves es el método recomendado y más seguro para SSH. Utiliza un par de claves criptográficas: una clave privada (que se mantiene en secreto en su máquina local) y una clave pública (que se coloca en el servidor remoto).

Generación de Pares de Claves SSH

Use ssh-keygen para generar un nuevo par de claves. Se recomienda usar una contraseña segura para su clave privada.

ssh-keygen -t rsa -b 4096

Este comando genera un par de claves RSA con una longitud de 4096 bits. La clave privada (id_rsa) y la clave pública (id_rsa.pub) se almacenarán típicamente en ~/.ssh/.

Copia de su Clave Pública a un Servidor Remoto

Para habilitar la autenticación basada en claves, su clave pública debe colocarse en el archivo ~/.ssh/authorized_keys en el servidor remoto. La utilidad ssh-copy-id automatiza este proceso:

ssh-copy-id username@hostname_or_IP_address

Este comando le pedirá la contraseña del usuario remoto una vez, luego copiará su clave pública y establecerá los permisos correctos. Después de esto, debería poder conectarse sin una contraseña (aunque se le pedirá la frase de contraseña de su clave privada si configuró una).

Advertencia: Nunca comparta su clave privada con nadie. Debe tener permisos de archivo estrictos (chmod 600 ~/.ssh/id_rsa).

Gestión de Conexiones y Configuraciones SSH

Ejecución de un Comando Único de Forma Remota

SSH no es solo para shells interactivos. Puede ejecutar un solo comando en un servidor remoto directamente y devolver su salida a su terminal local.

ssh username@hostname_or_IP_address 'command_to_execute'

Ejemplo:

ssh [email protected] 'ls -l /var/log/'
ssh [email protected] 'sudo apt update && sudo apt upgrade -y'

Uso del Archivo de Configuración SSH (~/.ssh/config)

Para conexiones frecuentes, definir hosts en ~/.ssh/config puede ahorrar tiempo y simplificar comandos. Este archivo le permite establecer alias, especificar usuarios, puertos, claves privadas y otras opciones de conexión.

Entrada de ejemplo de ~/.ssh/config:

Host webserver
    Hostname 192.168.1.100
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_rsa_web
    ForwardAgent yes

Host devbox
    Hostname dev.mydomain.com
    User developer
    Port 22
    IdentityFile ~/.ssh/id_rsa_dev

Una vez configurado, puede conectarse simplemente usando el alias:

ssh webserver
ssh devbox

Mejor Práctica: Utilice siempre el archivo ~/.ssh/config para administrar conexiones SSH complejas. Mejora la legibilidad, reduce los errores de tipeo y centraliza sus configuraciones.

Transferencia Segura de Archivos con SSH

SSH proporciona dos herramientas principales para la transferencia segura de archivos: scp y sftp.

scp (Secure Copy Protocol)

scp se utiliza para copiar archivos y directorios entre hosts locales y remotos. Utiliza los mismos mecanismos de autenticación y seguridad que SSH.

Copia de un Archivo de Local a Remoto

scp /path/to/local/file username@hostname_or_IP_address:/path/to/remote/directory/

Ejemplo:

scp my_app.tar.gz admin@webserver:/var/www/html/

Copia de un Archivo de Remoto a Local

scp username@hostname_or_IP_address:/path/to/remote/file /path/to/local/directory/

Ejemplo:

scp admin@webserver:/var/log/nginx/access.log ~/logs/

Copia Recursiva de un Directorio

Use la bandera -r para directorios:

rscp -r /path/to/local/dir username@hostname_or_IP_address:/path/to/remote/parent_dir/

Preservación de Atributos de Archivo

Para preservar los tiempos de modificación, tiempos de acceso y modos, use la bandera -p:

scp -p localfile user@remotehost:/remotepath/

sftp (SSH File Transfer Protocol)

sftp proporciona un programa interactivo de transferencia de archivos, similar a FTP pero asegurado por SSH. Es ideal para administrar múltiples archivos o realizar operaciones complejas de directorios.

Conexión a un Servidor SFTP

sftp username@hostname_or_IP_address

Una vez conectado, obtendrá un indicador sftp>. Los comandos comunes incluyen:

  • ls: Listar el contenido del directorio remoto
  • lls: Listar el contenido del directorio local
  • cd remote_directory: Cambiar el directorio remoto
  • lcd local_directory: Cambiar el directorio local
  • get remote_file: Descargar un archivo
  • put local_file: Subir un archivo
  • mget remote_files: Descargar múltiples archivos (se admiten comodines)
  • mput local_files: Subir múltiples archivos (se admiten comodines)
  • exit o bye: Salir de la sesión SFTP

Sesión SFTP de Ejemplo:

sftp [email protected]
Connected to 192.168.1.100.
sftp> ls
config.ini  data/  logs/  public_html/
sftp> cd public_html
sftp> get index.html
Fetching /public_html/index.html to index.html
sftp> put new_page.html
Uploading new_page.html to /public_html/new_page.html
sftp> bye

Túneles SSH y Reenvío de Puertos

El túnel SSH, o reenvío de puertos, le permite crear conexiones seguras entre puertos locales y remotos, lo que permite el acceso a servicios que de otro modo podrían ser bloqueados por cortafuegos o inaccesibles directamente.

Reenvío de Puerto Local (-L)

El reenvío local le permite acceder a un servicio en una red remota (o en el propio servidor remoto) desde su máquina local como si se estuviera ejecutando localmente.

ssh -L [local_port]:[remote_host]:[remote_port] username@ssh_server

Ejemplo: Acceder a un servidor de base de datos (puerto 3306) en una red privada, a través de un host de salto ssh_server, desde el puerto 9000 de su máquina local.

ssh -L 9000:db.private.net:3306 [email protected]

Ahora, puede conectarse a localhost:9000 en su máquina local, y la conexión se reenviará de forma segura a db.private.net:3306 a través de jumphost.com.

Reenvío de Puerto Remoto (-R)

El reenvío remoto hace que un servicio en su máquina local (o red local) sea accesible desde el servidor remoto, y potencialmente para clientes en la red del servidor remoto.

ssh -R [remote_port]:[local_host]:[local_port] username@ssh_server

Ejemplo: Hacer que un servidor web local (puerto 8000) sea accesible desde ssh_server en el puerto 8080.

ssh -R 8080:localhost:8000 admin@remote_server.com

Ahora, cualquiera en remote_server.com puede acceder a su servidor web local conectándose a localhost:8080 en remote_server.com.

Reenvío de Puerto Dinámico (-D)

El reenvío de puertos dinámico crea un proxy SOCKS, lo que le permite enrutar todo su tráfico (o el tráfico específico de la aplicación) a través del túnel SSH. Esto es útil para omitir cortafuegos o asegurar la navegación.

ssh -D [local_port] username@ssh_server

Ejemplo: Crear un proxy SOCKS en el puerto 1080 de su máquina local a través de ssh_server.

ssh -D 1080 [email protected]

Configure su navegador o aplicación para usar localhost:1080 como proxy SOCKS5, y todo su tráfico de red se canalizará a través de jumphost.com.

Uso Avanzado de SSH y Consejos

Ejecución de Comandos en Segundo Plano

Para comandos no interactivos que deben ejecutarse y separarse, puede usar la bandera -f (pasa al segundo plano antes de la ejecución del comando) y -N (no ejecuta un comando remoto).

ssh -f -N -L 9000:db.private.net:3306 [email protected]

Esto configura un reenvío de puerto local en segundo plano.

Agente SSH y ssh-add

ssh-agent es un programa que mantiene sus claves privadas en memoria, por lo que solo necesita ingresar su frase de contraseña una vez por sesión. ssh-add agrega claves al agente.

# Iniciar el agente (si aún no se está ejecutando)
eval "$(ssh-agent -s)"
# Agregar sus claves al agente
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_web # Para una clave específica

ssh-agent es crucial cuando se usa ForwardAgent yes en su ~/.ssh/config, lo que le permite usar sus claves locales para autenticarse desde el host de salto a servidores posteriores sin colocar su clave privada en el host de salto.

Conexiones SSH Persistentes (ControlMaster)

Para conexiones más rápidas y menor sobrecarga, ControlMaster en su ~/.ssh/config permite que múltiples sesiones SSH compartan una única conexión de red.

Host *
    ControlMaster auto
    ControlPath ~/.ssh/control/%r@%h:%p
    ControlPersist 4h

Esta configuración crea un socket de control para la primera conexión (ControlMaster auto) y las conexiones posteriores al mismo host reutilizarán este socket durante hasta 4 horas (ControlPersist 4h).

Solución de Problemas de Conexiones SSH

  • Permiso Denegado: Verifique los permisos de archivo para claves privadas (chmod 600 ~/.ssh/id_rsa), claves públicas (chmod 644 ~/.ssh/id_rsa.pub) y el directorio .ssh (chmod 700 ~/.ssh). En el servidor, asegúrese de que ~/.ssh/authorized_keys tenga chmod 600 y ~/.ssh tenga chmod 700.
  • Tiempo de Espera Agotado de la Conexión: El servidor podría estar caído, el cortafuegos podría estar bloqueando el puerto 22 (o el puerto personalizado), o la dirección IP es incorrecta.
  • Salida Detallada: Use las banderas -v, -vv, o -vvv con ssh para obtener información detallada de depuración.
    bash ssh -vvv [email protected]

Conclusión

SSH es una herramienta indispensable para los administradores de sistemas, ya que proporciona acceso remoto seguro y eficiente, ejecución de comandos y capacidades de transferencia de archivos. Al dominar los comandos y técnicas analizados en este artículo, desde conexiones básicas y autenticación basada en claves hasta túneles avanzados y gestión de configuraciones, puede mejorar significativamente su productividad y mantener la seguridad de su infraestructura de servidor.

Revise regularmente sus configuraciones SSH, utilice la autenticación basada en claves y aproveche las potentes funciones como ~/.ssh/config y ssh-agent para optimizar sus tareas diarias. Con estos comandos SSH esenciales a su alcance, está bien equipado para administrar sistemas remotos con confianza y precisión. Siga practicando y explorando sus amplias características para desbloquear una mayor eficiencia en sus tareas administrativas.