Configuraciones útiles de SSH

Hay dos cosas que técnicamente deben de ser un «must» cuando usamos ssh para conectarnos a nuestros equipos remotos; lo primero es acceder a través de una llave en vez de contraseña y lo segundo es tener en un archivo de configuración los datos de la conexión para organizarlos adecuadamente y no tener que escribirlos todo el tiempo.

Conectarnos con una llave

Conectarnos con llave en lugar de contraseña tiene como principal ventaja la seguridad, ya que la autenticación se realiza mediante la validación de una llave pública vs una privada, lo cual significa que solo nuestro equipo con la llave configurada tendrá garantizado el acceso remoto, además de que es mucho mas difícil robar un set de llaves que una contraseña.

Son dos los pasos que necesitamos realizar con las herramientas de ssh de nuestro equipo para generar la llave y configurarla en nuestro equipo remoto.

Paso 1 – Generar la llave

Para generar la llave necesitamos usar el comando ssh-keygen el cual nos ayudará a construir la llave que usaremos para configurar nuestra conexión, este comando es importante que lo hagamos desde el prompt del usuario que deseamos que tenga la conexión:

Al ejecutar el comando ssh-keygen sin ninguna opción adicional estamos creando un par de llaves RSA de 2048 bits y si no realizamos ninguna modificación este se guardará en el directorio «~/.ssh/id_rsa».

En este paso existe la posibilidad de configurar una contraseña de acceso para usar la llave, la cual si deseamos tener debemos de ingresarla al momento que es solicitada en la ejecución del comando, yo recomiendo fuertemente usar una contraseña.

Paso 2 – Copiar la llave

En el segundo paso vamos a instalar la llave al servidor remoto, para ello usaremos el comando ssh-copy-id el cual copiara la llave pública al archivo authorized_keys en el servidor, garantizando de esta forma el acceso para nuestro usuario:

     $ ssh-copy-id user@example-server.net

Al ejecutar este comando nos solicitará la contraseña del usuario del equipo remoto y si está es correcta, realizará el copiado de la llave.

En caso de que la ruta a la llave publica no sea la establecida por default en la ejecución del comando ssh-keygen necesitaremos ocupar la opción «-i» para indicar la ubicación:

     $ ssh-copy-id -i "/ruta_llave/id_rsa.pub" user@example-server.net

Si no hubo ningún error en la ejecución de los comandos ya debemos poder ingresar al equipo remoto sin la necesidad de la contraseña del usuario remoto y nos estaremos autenticando por medio de la llave que instalamos previamente.

Archivo de configuración

Normalmente para ingresar con ssh a nuestro equipo remoto necesitamos tener a la mano una serie de datos como, puerto, nombre de usuario, dirección ip, ruta a la llave, etc.; esto se vuelve un poco complejo o tedioso cuando son muchos los equipos que tenemos que conectarnos y por muy buena memoria que tengamos se vuelve difícil.

La mayoría alguna vez hemos pensado que hacer de nuestra conexión un alias es buena idea y la verdad es que funciona, pero no es la mejor opción. Lo bueno es que dentro de las maravillas de ssh es que tenemos un archivo de configuración que nos va a facilitar la vida en este aspecto, en este archivo podremos organizar todas nuestras conexiones.

La ruta al archivo es «/home/{username}/.ssh/config», el cual no existe de forma nativa por lo que debemos de crearlo. La sintaxis mas básica para una conexión es la siguiente:

En la primer linea vemos el objeto «Host» y ahí es donde vamos a nombrar la conexión para después solo ejecuta el comando ssh de la siguiente forma:

     $ ssh servidor-remoto

Las opciones que tenemos para configurar en este archivo son las siguientes:

  • Hostname: Dirección IP o nombre de dominio
  • Port: Se puede omitir si el puerto de conexión es el predeterminado (22)
  • User: Nombre de usuario con el cual se va a realizar la conexión
  • IdentityFile: Ruta a la llave publica (solo útil si se configuro la autenticación por llaves)

Existe otro buen numero de parámetros a configurar para una conexión, las cuales no son muy comunes de utilizar. Si desean ahondar mas en el tema les recomiendo recurrir al siguiente vinculo que es la documentación oficial: https://linux.die.net/man/5/ssh_config

Bonus

Alguna vez he tenido la necesidad de exponer un servicio de un servidor, por ejemplo, un motor de mysql, pero el administrador de dicho equipo no nos dejo abierto ese puerto en el firewall y para solucionar esto hay un poco de magia de ssh que podemos usar para permitir que otros se conecten a ese motor usando nuestro equipo como tunel.

Concretamente podemos abri un puerto de nuestro equipo (cliente) para que acceda a un puerto del equipo remoto a través de la conexión ssh que tenemos establecida, para esto, usaremos el comando de la siguiente forma:

     $ ssh -f -N -L 1006:127.0.0.1:3306 usuario@database-server.net

La opción «-f» nos permite ejecutar la conexión en segundo plano, «-N» para habilitar el modo forwarding port y «-L» nos permite ingresar el puerto de entrada y salida para la conexión.

Este tipo de conexión también la podemos ingresar al archivo de configuración, quedando de la siguiente forma:

Ahora solo ejecutamos de la siguiente forma:

     $ ssh -f -N db-tunnel

Si tienen alguna duda siempre pueden buscarnos en nuestra instancia de matrix, los datos para la conexión están por aquí: https://freejolitos.com/faq/

:wq!


Publicado

en

, , , , ,

por

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *