El comando ssh en Linux: conexión remota segura

Introducción

SSH (Secure Shell) es un protocolo de red que permite acceder de forma segura a otro equipo mediante una conexión cifrada. En entornos Linux, el comando ssh se convierte en la herramienta predeterminada para administrar servidores, transferir archivos y ejecutar comandos remotamente sin exponer credenciales en texto plano. Este artículo explica paso a paso cómo usar ssh, desde la instalación hasta configuraciones avanzadas como túneles y autenticación con claves públicas.

¿Qué es SSH?

SSH sustituye a herramientas antiguas como telnet y rsh, que enviaban información sin cifrado. Utiliza criptografía de clave pública para autenticar el servidor y, opcionalmente, al cliente. Todo el tráfico, incluyendo contraseñas y datos, viaja dentro de un canal seguro protegido contra escuchas y manipulación. Además, SSH permite reenviar puertos y crear túneles que pueden encapsular otros protocolos de forma segura.

Instalación y verificación

En la mayoría de distribuciones Linux, el cliente ssh ya viene instalado. Para confirmarlo, ejecute ssh -V en la terminal; debería mostrar la versión de OpenSSH. Si falta, instálelo con el gestor de paquetes: en Debian/Ubuntu use sudo apt-get install openssh-client, en Fedora sudo dnf install openssh-clients y en Arch sudo pacman -S openssh. El servidor, necesario si desea aceptar conexiones, se instala con openssh-server.

Sintaxis básica

La forma más simple de conectarse es ssh usuario@host. Si el nombre de usuario en la máquina remota coincide con el local, puede omitirlo: ssh host. Por defecto, ssh usa el puerto 22; para especificar otro, agregue la opción -p puerto. Por ejemplo, ssh -p 2222 admin@ejemplo.com se conecta al puerto 2222.

Opciones más usadas

  • -p puerto: define el puerto de conexión.
  • -i archivo_clave: indica la clave privada a usar para autenticación.
  • -v: modo verboso, útil para depurar problemas de conexión.
  • -C: habilita compresión de datos, beneficioso en enlaces lentos.
  • -X: reenvío de X11 para ejecutar aplicaciones gráficas remotamente.

Conexión sin contraseña con claves públicas

Para evitar escribir la contraseña cada vez, genere un par de claves con ssh-keygen -t rsa -b 4096. Copie la clave pública al servidor usando ssh-copy-id usuario@host o añadiéndola manualmente a ~/.ssh/authorized_keys. Después, pruebe el acceso con ssh usuario@host; debería entrar sin solicitar contraseña. Puede proteger su clave privada con una frase de paso para aumentar la seguridad.

Túneles y reenvío de puertos

SSH puede crear túneles que cifran tráfico de otras aplicaciones. Un túnel local se crea con ssh -L puerto_local:destino:puerto_destino usuario@host. Por ejemplo, ssh -L 8080:localhost:80 usuario@host redirige el puerto 8080 de su máquina al puerto 80 del servidor, permitiendo acceder a un servicio web interno de forma segura. El reenvío remoto (-R) hace lo contrario, exponiendo un puerto local al servidor.

Buenas prácticas de seguridad

  • Desactive la autenticación por contraseña en el servidor estableciendo PasswordAuthentication no en /etc/ssh/sshd_config y recargue el daemon.
  • Limite los usuarios que pueden acceder mediante AllowUsers o DenyUsers.
  • Cambie el puerto predeterminado a uno no estándar para reducir ataques automatizados.
  • Use siempre versiones recientes de OpenSSH y aplique actualizaciones de seguridad.
  • Monitoree los intentos de conexión con herramientas como fail2ban o revisando /var/log/auth.log.

Conclusión

El comando ssh es una pieza fundamental para la administración segura de sistemas Linux. Dominar su sintaxis, opciones y técnicas avanzadas como autenticación con claves y túneles le brinda la capacidad de gestionar infraestructuras remotas con confianza y sin comprometer la seguridad. Aplicar las buenas prácticas descritas garantiza que sus conexiones permanezcan protegidas frente a amenazas externas.