En la publicación anterior, completamos la preparación para un acceso seguro a SSH mediante la generación de claves SSH (Key Generation).
Ver publicación anterior: SSH keygen: guía perfecta para principiantes
Ahora es el momento de aprender a conectarse a un servidor remoto utilizando SSH. El comando SSH es más simple de lo que parece, pero conocer algunos principios y opciones útiles te permitirá usarlo de manera mucho más eficiente.
¿Cómo se escribe el comando SSH?
El formato básico del comando SSH es el siguiente:
ssh [opciones] [nombre_de_usuario]@[dirección_del_host] [comando]
¿Veamos en detalle qué significa cada uno de los elementos?
-
ssh
: Este es el comando que ejecuta el cliente SSH. -
[opciones]
: Aquí puedes especificar varias opciones que controlan el método de conexión SSH. Por ejemplo, puedes usar un archivo de clave específico o establecer el reenvío de puertos. (Lo cubriremos en detalle más adelante.) -
[nombre_de_usuario]
: Este es el nombre de la cuenta de usuario en el servidor remoto al que deseas acceder. Si el nombre de usuario de tu computadora local es el mismo que el del servidor remoto, puedes omitirlo. -
[dirección_del_host]
: Esta es la dirección IP o el nombre de dominio del servidor remoto al que deseas conectarte. -
[comando]
(opcional): Si hay un comando que deseas ejecutar inmediatamente en el servidor remoto después de conectarte, lo ingresas aquí. Después de ejecutar este comando, la sesión SSH se cerrará. Si omites esta parte, podrás iniciar sesión y usar un shell interactivo.
Principios para escribir comandos y consejos fáciles de recordar
El comando SSH presenta una estructura que aclara "¿qué usuario se conectará a qué servidor?".
-
Principio básico:
ssh nombre_de_usuario@dirección_del_host
- Ejemplo:
ssh ubuntu@192.168.1.100
(Conexión a la cuentaubuntu
en el servidor 192.168.1.100) - Ejemplo:
ssh root@mywebserver.com
(Conexión a la cuentaroot
en el servidor https://www.google.com/search?q=mywebserver.com) -
Consejo fácil de recordar:
-
"Yo (usuario local) quiero entrar a donde está (usuario remoto) en el servidor allí!" Piénsalo así.
ssh
(quiere conectarse)[nombre_de_usuario]@
(¿quién?)[dirección_del_host]
(¿dónde?)- Para servidores a los que te conectas frecuentemente, puedes usar el archivo
~/.ssh/config
para conectarte cómodamente utilizando alias sin tener que ingresar direcciones largas cada vez. (¡Este tema se abordará con más detalle en la próxima publicación!)
- Ejemplo:
Exploración de opciones útiles de SSH
SSH ofrece varias opciones que configuran su potente funcionalidad para diferentes situaciones. A continuación, te presento algunas de las opciones clave.
1. -i <IdentityFile>
: especificar un archivo de clave privada específico
Esta opción se utiliza cuando tienes varias claves SSH y deseas usar una clave privada específica para conectarte a un servidor determinado. Aunque, por defecto, se usan ~/.ssh/id_rsa
o ~/.ssh/id_ed25519
, es útil cuando has creado con otros nombres o manejas varias claves.
- Uso:
ssh -i ~/.ssh/my_custom_key ubuntu@my_server.com
-
Ejemplo:
Bash
``` ssh -i ~/.ssh/id_ed25519_my_server ubuntu@example.com
Resultado esperado:
Ingrese la contraseña para la clave '/home/youruser/.ssh/id_ed25519_my_server': # Ingrese la contraseña para conectarse
```
2. -p <Port>
: especificar el puerto SSH del servidor remoto
La mayoría de los servidores SSH utilizan por defecto el puerto 22. Sin embargo, por razones de seguridad, a menudo el administrador cambia el puerto SSH. En ese caso, debes usar la opción -p
para especificar el número de puerto modificado.
- Uso:
ssh -p 2222 your_user@your_server.com
(Conexión al puerto 2222) -
Ejemplo:
Bash
``` ssh -p 2222 myuser@192.168.1.100
Resultado esperado:
No se puede establecer la autenticidad del host '192.168.1.100:2222 (...)'
¿Estás seguro de que deseas continuar conectando (yes/no/[huella digital])? yes
Advertencia: '192.168.1.100:2222' (ED25519) se ha añadido permanentemente a la lista de hosts conocidos.
Último inicio de sesión: lun jun 17 10:00:00 2024 desde your_ip
myuser@server:~ $
```
3. -X
: habilitar reenvío X11 (ejecutar programas gráficos)
Se utiliza cuando deseas ejecutar aplicaciones GUI (Interfaz Gráfica de Usuario) que están instaladas en el servidor remoto y mostrarlas en la pantalla de tu computadora local. Utiliza el sistema X Window y debe haber un servidor X corriendo en el sistema local (necesitas XQuartz en macOS, PuTTY + VcXsrv en Windows, etc.).
- Uso:
ssh -X your_user@your_server.com
-
Ejemplo:
```Bash ssh -X myuser@remote-gui-server.com
Ejecuta firefox en el servidor remoto (una ventana de firefox aparecerá en la pantalla local)
myuser@remote-gui-server:~ $ firefox & ```
(Puede ser incómodo si el rendimiento no es bueno o si hay mucho retraso en la red.)
4. -L <LocalPort>:<RemoteHost>:<RemotePort>
: reenvío de puerto local (Local Port Forwarding)
Permite que las conexiones entrantes en un puerto específico (LocalPort) de la computadora local sean redirigidas a un puerto específico (RemotePort) en un servidor remoto (RemoteHost) a través de un túnel SSH. Es útil principalmente para acceder a servicios detrás de un cortafuegos o para que una aplicación desarrollada localmente se conecte a una base de datos remota.
- Uso:
ssh -L 8080:localhost:80 your_user@your_server.com
- Este comando redirige todas las conexiones entrantes al puerto 8080 de la computadora local a través de
your_server.com
al puerto 80 interno (localhost:80
significayour_server.com
en sí mismo).
- Este comando redirige todas las conexiones entrantes al puerto 8080 de la computadora local a través de
-
Ejemplo:
-
Cuando solo se puede acceder a través de SSH y no se puede conectar directamente al servidor web remoto (puerto 80):
```Bash ssh -L 8080:localhost:80 myuser@my_web_server.com
Después de ejecutar este comando, si accedes a http://localhost:8080 en tu navegador local
es fundamentalmente lo mismo que conectarse al puerto 80 de my_web_server.com.
```
-
Si
my_db_app
necesita conectarse al puerto 3306 de MySQL endb_server.internal
que solo es accesible desdemy_app_server.com
:```Bash ssh -L 3307:db_server.internal:3306 myuser@my_app_server.com
Después de ejecutar este comando, si
my_db_app
se conecta a localhost:3307se conectará a db_server.internal en el puerto 3306 a través de my_app_server.com.
```
(La razón para usar 3307 es que ya puede haber un MySQL que utilice el puerto 3306 en local.)
-
5. -N
: mantener el reenvío de puerto sin ejecutar comandos remotos
Se utiliza junto con las opciones -L
o -D
(Dynamic Port Forwarding, SOCKS proxy), y permite abrir una sesión SSH sin ejecutar un comando de shell en el servidor remoto y mantener simplemente la funcionalidad del reenvío de puerto. Es útil principalmente para mantener túneles de reenvío de puerto en segundo plano.
- Uso:
ssh -N -L 8080:localhost:80 your_user@your_server.com
-
Ejemplo:
```Bash ssh -N -L 8080:localhost:80 myuser@my_web_server.com &
Podrás acceder a través del navegador local manteniendo el túnel de reenvío de puerto en segundo plano (&)
```
6. -f
: poner la sesión SSH en segundo plano
Esta opción envía el proceso del cliente SSH al fondo después de que la conexión ha sido exitosa. Generalmente se usa junto con la opción -N
para mantener el túnel de reenvío de puerto en segundo plano.
- Uso:
ssh -f -N -L 8080:localhost:80 your_user@your_server.com
-
Ejemplo:
```Bash ssh -f -N -L 8080:localhost:80 myuser@my_web_server.com
Al ejecutar este comando, el control del terminal se devuelve inmediatamente y el túnel SSH se ejecutará en segundo plano.
Puedes verificar los procesos usando el comando ps aux | grep ssh
```
Conclusión
En esta publicación, exploramos la estructura básica del comando SSH junto con algunas de las opciones clave que se utilizan con frecuencia. En particular, el uso de -p
para especificar puertoy -L
para el reenvío de puertos son aspectos que se aplican muy a menudo en el trabajo práctico, así que asegúrate de dominarlos.
En la próxima publicación, veremos cómo gestionar el acceso SSH de manera aún más conveniente utilizando el archivo ~/.ssh/config
. Si tienes alguna pregunta, ¡no dudes en dejar un comentario!
No hay comentarios.