educación, informática y demás

Uncategorized

Debian 12 CLI. Instalando y configurando SSH

Ya hemos configurado nuestro servidor básicamente con conexión a la red de área local en la entrada Instalando Debian CLI. El siguiente paso será instalar y configurar un servidor SSH que nos permita administrarlo de forma remota.

Servidor SSH

El protocolo SSH, Secure Shell, permite iniciar una shell en un equipo remoto de forma segura a través de redes no seguras. Gracias a ssh podemos interactuar a través de comandos con un sistema remoto. Además, proporciona una capa de seguridad cifrandos los datos que se envían y reciben a través de la red de forma automática.

De estas forma, aunque la red por la que viajan los datos sea no segura, como por ejemplo Internet, al utilizar cifrado extremo a extremo la seguridad de la comunicación (al menos la confidencialidad e integridad) se garantizan.

Instalando el servidor ssh

El paquete a instalar es openssh-server.

Una vez instalado se ejecuta el demonio de sshd.

Para gestionarlo utilizaremos systemctl con la operación o comando que queramos realizar seguido del nombre del servidor sshd.

Vamos a parar el servidor ssh con la opción stop.

Vamos a lanzarlo otra vez con el comando start en systemctl.

Cliente y servidor SSH

Nosotros no hemos instalado ningún cliente ssh, hemos instalado el servidor. Sin embargo, por defecto, los sistemas GNU/Linux suelen instalar un cliente ssh durante el proceso de instalación.

El cliente ssh lo tenemos disponible en el comando ssh.

Con este cliente nos podemos conectar de forma remota con otro equipo y administrarlo de manera segura a través de una shell.

El problema que nos podemos encontrar en un sistema que tiene instalado el servidor SSH y el cliente es que confundamos sus ficheros de configuración.

El fichero de configuración del servidor está en /etc/ssh/sshd_config, la d nos indica que es del demonio de ssh.

El fichero de configuración del cliente es /etc/ssh/ssh_config

Si queremos consultar la página de manual del cliente ssh podemos hacerlo con man ssh.

Si queremos obtener información de configuración del cliente SSH podemos consultar su página de manual con el comando man ssh_config.

Si queremos consultar la ayuda del fichero de configuración del servidor utilizamos man sshd_config.

Conectándonos a nuestro servidor a través de ssh: Debian xfce a Debian CLI

Nos vamos a conectar desde el sistema Debian 12 xfce al sistema Debian 12 CLI srv que acabamos de configurar.

Lanzamos la máquina virtual SSOO – Debian 12 xfce . Una vez iniciada sesión con el usuario alumno, lo primero que tenemos que hacer es comprobar que ambos sistemas tienen conexión a través de la LAN. Para ello utilizaremos el comando ping.

Esta máquina está conectada a otra LAN distinta. Si eso es así, es probable que la configuración de red haya que modificarla tanto físicamente (desde virtualbox) como lógicamente.

Nos conectamos a la misma red físicamente

Ahora hay que configurar la interfaz de red

Configuramos la interfaz de red

Reiniciamos la interfaz de red y comprobamos la configuración de red actual

Vamos a mandar un ping de nuevo

Vamos a mostar, por curiosidad el fichero /etc/resolv.conf y el fichero /etc/network/interfaces

Vamos a conectarnos a través de ssh

Vamos a añadir un usuario: marinapg

Para cerrar la sesión remota exit

Conectando con un usuario distinto

Sintaxis: ssh nombre de usuario@máquina.

Hasta ahora nos estamos conectando a una máquina remota con el usuario con el que estamos trabajando en la máquina local, almno. Para ello solo tenemos que escribir ssh seguido de la dirección de la máquina remota.

ssh [user@]host[:host]

Si no indicamos un usuario, entonces ssh utiliza como usuario el usaurio actual en el equipo local.

en esta práctica queremos conectarnos con el usuario marinapg a la máquina 192.168.25.253, por tanto tendríamos que escribir como parámetro: marinapg@192.168.25.253.

Vamos a probar con otro usuario porque esto es raro

Ahora vamos a echar un vistazo al usuario marinapg

Configurando el servidor para que escuche por un puerto distinto del puerto 22

El puerto de ssh es el 22, que es un puerto bien conocido, lo cual permite a un atacante explorar los puertos disponibles en un servidor y conocer que servicios hay disponibles así como la forma de atacarlos accediendo a ellos.

Vamos a cambiar el puerto de escucha del servidor ssh en el sistema srv01 para que escuche en el puerto 2022.

Una vez hecho esto, vamos a conectarnos desde nuestro Debian 12 con xfce a traves de ssh pero utilizando el puerto 2022.

Para configurar el servidor ssh tenemos que editar el fichero de configuración sshd_config en /etc/ssh/sshd_config.

Vemos la configuración actual, destacando que tenemos información detallada sobre parámetros de configuración de ssh en la página de manual del fichero sshd_config.

También nos llama la atención el parámetro de configuración Port. Vamos a modificarlo para que nuestro servidor escuche desde el puerto 2022.

Podríamos consultar la página de manual si queremos estar seguros de lo que estamos haciendo.

Reiniciamos el servicio sshd para que los cambios realizados en el fichero de configuración surtan efecto.

Pero, pero, pero… si he reiniciado el servicio, porque sigo conectado 🙂

El demonio de sshd está escuchando nuevas peticiones. Cuando lo hemos reiniciado, se ha reiniciado un solo proceso. El proceso que está gestionando la conexión remota por ssh actualmente con mi usuario no se ha reiniciado no se ha parado.

Cómo podemos cerrar todas las conexiones activas: matando todos los procesos de sshd.

Cuidado! si hacemos este desde una conexión ssh, la podemos liar 😀

Ahora vamos a conectarnos desde el cliente 😀

Primero no nos deja conectarnos porque el puerto 22 lo hemos cambiado, de hecho, no hay nadie escuchando en ese puerto. Después se queda intentando conexión, pero no va a funcionar porque hemos matado a todos los procesos sshd

La solución pasa por iniciar de nuevo el servicio, para lo cual tendremos que acceder físicamente al servidor srv01.

Ahora si 🙂

Configurando el cliente ssh

Esto está bien, pero… no me gusta tener que escribir una y otra vez el puerto 2022 cada vez que utilizo ssh.

Configura el cliente ssh en tu sistema Debian 12 xfce para que automáticamente cada vez que te conectes a srv utilice el puerto 2022.

Solución

Tenemos que configurar el programa ssh, que es el programa cliente ssh que utilizamos para conectarnos a un servidor ssh, en el sistema Debian 12 debsr con XFCE.

Cuidado! en esta terminal estamos conectados por ssh al sistema srv01.

Estamos en el equipo debsrv y editamos el fichero /etc/ssh/ssh_config

Host * indica que la configuración que se expresa debajo se aplicará a todos los hosts. Nosotros solo queremos que se aplique a 192.168.25.253, así que vamos a crear una nueva configuración llamada Host 192.168.25.253.

Añadimos esta línea al final del fichero para que cuando nos conectemos al host 192.168.25.253 se aplique esa configuración: Port 2022.

La configuración que aparece debajo de Host * se aplicará con cualquier host de destino.

Para más información podemos consultar la página de manual de ssh_config.

Guardamos y vamos a mostrar la configuación real.

Ahora probamos a conectarnos con nuestro servidor.

Configurando inicio de sesión sin contraseña

Estamos cansados de tener que escribir una y otra vez la contraseña del usuario en el sistema remoto. No podemos quitar la contraseña del usuario en el sistema remoto porque sino cualquiera podría acceder, verdad?

Lo que vamos a hacer es utilizar criptografía asimétrica proporcionada por ssh y dejar toda la seguridad del acceso en nuestro cuenta de usuario local. Es decir, si alguien pudiera acceder a nuestro sistema debsrv con nuestro usuario, como lo vamos a configurar ahora mismo, podría acceder al sistema remoto srv01 con la cuenta alumno sin insertar ninguna contraseña. Por tanto, debemos estar seguros de que nuestro sistema es lo suficientemente seguro.

Vamos a generar un par de claves pública y privada para facilitar la conexión al sistema srv01 con el usuario alumno desde el sistema GNU/Linux Debian 12 con xfce: debsrv.

Para ello vamos a utilizar dos comandos: ssh-keyge y ssh-copy-id. tienes información en educatica.es. Inténtalo!

Primero generamos las contraseñas privada y pública con ssh-keygen. Esto lo tenemos que hacer en el sistema debsrv.

Ejecutamos ssh-keygen.

Esto ha generado ficheros con la contraseña privada y pública. ¿Dónde están?

Ahora vamos a copiar la clave pública al sistema remoto utilizando la utilidad ssh-copy-id

Ejecutamos el comando para que se copie la contraseña pública

Ahora vamos a probarlo..

Configurando el sistema para acceder a srv01 a través de la cadena de texto srv01

Es decir, no queremos tener que escribir una y otra vez 192.168.25.253, nos gustaría poder escribir simplemente el nombre del sistema srv01 y que ssh se conectara automáticamente a esa máquina remota.

Podemos utilizar la resolución estática y local de nombres en el sistema 🙂

Vamos a ver la página de manual de hosts

Lo único que tenemos que hacer es añadir una línea dónde asociemos la dirección IP 192.168.25.253 con el nombre de host srv01.

Guardamos y probamos

Vamos a probar a conectarnos, felizmente! 🙂

Pero si ya lo cambiamos!!!

Vaya! El patrón que utiliza ssh para decidir si se aplica o no la configuración que para ese host es la dirección IP. En nuestro caso estamos utilizando un nombre, así que tendremos que añadir el nombre a la lista de patrones en el host configurado para conectarnos a srv01.

Guardamos y probamos.

Permitir solo conexiones del usuario alumno

Vamos a configurar nuestro servidor para que solo pueda conectarse a través de ssh el usuario alumno y nadie más.

Vamos a consultar la ayuda del fichero de configuración sshd_config

Añadimos la configuración

Reiniciamos el servicio y probamos a conectarnos con marinapg

Veamos…

Práctica: Instalando software de forma remota

Desde el sistema debsrv vamos a instalar los siguientes paquetes de software en el sistema srv01: apache2 vsftpd samba

Ojo, queremos hacerlo sin tener que iniciar sesión con ssh en el sistema remoto, tan solo ejecutando un comando.

Podemos ejecutar comandos remotos sin tener que iniciar sesión en la máquina destino con ssh.

Vamos a probarlo

Vamos a ejecutarlo en el servidor

Vamos a intentar ejecutar un comando de administrador

Vaya, necesitamos ejecutar como root :_(

Una opción es permitir las conexiones de root a través de ssh. Nos conectamos y editamos el fichero de configuración

Ahora añadimos a root, guardamos y reiniciamos

Vamos a ello

Reiniciamos y salimos de al shell remota

Probamos ejecución de comando remoto

No funciona….

Vamos a echar un vistazo a la configuración de sshs en srv01. Nos conectamos a srv01

Resulta que por defecto el parámetro PermitRootLogin está establecido a no, por seguridad. ¿Qué significa? que root no podrá iniciar sesión.

Tenemos que habilitarlo.

Según la configuración comentada se permitiría inicio de sesión a root pero sin el uso de contraseña como medida de seguridad. Cuidado! esto no significa que deje iniciar sesión como root sin insertar contraseña, sino que se debe utilizar otro mecanismo más seguro para iniciar sesión con root a través de ssh.

Por ahora, vamos a permitir rootlogin con yes.

Guardamos, salimos y reiniciamos.

Salimos de la shell remota y tratamos de iniciar con root.

Conexión con root sin insertar contraseña utilizando claves RSA

Ahora queremos poder ejecutar comandos como root o iniciar shell interactiva sin tener que insertar contraseña, es más, queremos que solo se pueda iniciar sesión con root de esta forma.

Vamos a terminar de configurar bien el servidor SSH para evitar que root pueda iniciar sesión con contraseña. Es decir vamos a usar la opción PermitRootLogin estableciendo como valor.

Editamos

Reiniciamos y probamos

Configurando el cliente para que por defecto inicie sesión con el usuario root

Esto lo tenemos que hacer en el sistema cliente, en debsrv, porquer vamos a configurar el programa ssh.

Ahora configuramos

Vamos a probar 🙂

Este es el comportamiento por defecto, si no utilizamos nombre de usuario al tratar de conectarnos. No obstante, si queremos conectarnos con un usuario concreto podemos indicarlo al utilizar ssh.

Dejar una respuesta