educación, informática y demás

2608 - Administración remota de sistemas

Administración remota y segura con SSH

Vamos a realizar una práctica de administración remota de un sistema GNU/Linux Debian utilizando ssh.

Contextualización

Vamos a trabajar con las máquinas virtuales: SSOO – Debian 12 – XFCE y SSOO – Debian 12 CLI, que será la máquina a la que nos vamos a conectar utilizando ssh.

Lo primero que deberíamos saber y comprobar es las direcciones IP de cada máquina, que estén conectadas a la misma LAN y que tengan conexión entre ellas.

Iniciando sesión remota con ssh

SSH es un protocolo de red de nivel de aplicación que permite conexiones seguras utilizando cifrado asimétrico a través de TLS/SSL. Para poder conectarnos a un equipo utilizando el protocolo ssh necesitamos dos elementos fundamentales:

  • Un servidor. Instalado en el equipo destino de la conexión
  • Un cliente. Disponible en el equipo que utilizaremos para conectarnos.

Instalando el servidor

En GNU/Linux podemos instalar el paquete openssh-server que instalará un servidor SSH en nuestro equipo.

En nuestro servidor ya lo tenemos instalado, porque lo habíamos instalado en una práctica previa. No obstante, a modo informativo, vamos a ver cómo se instalaria.

Instalando el cliente

El cliente tiene que estar instalado en el sistema que queremos utilizar para conectarnos de forma remota al servidor. En nuestro caso Debian con interfaz gráfica de usuario.

Por defecto este programa seguramente ya esté instalado. Se trata del programa ssh.

Este sería el cliente para una conexión segura de shell remoto.

Caso práctico 1. Iniciando sesión remota.

Si no indicamos nada, el cliente ssh trata de iniciar sesión en la máquina remota indicada por parámetro con el usuario actual en el sistema local. Es decir, tratará de iniciar sesión con el usuario alumno, que es el usuario que estamos utilizando en esta máquina local.

Para cerrar la conexión tan solo tenemos que ejecutar exit.

Caso práctico 2. Iniciar sesión con otro usuario distinto

Vamos a iniciar sesión con marinapg.

Oh! que no tenemos cuenta de marinapg en el servidor! Pues nada, nos conectamos con alumno, creamos una cuenta de usuario y volvemos a probar.

Hemos realizado una tarea de administración simple de forma remota 🙂

Ahora cerramos la sesión remota del usuario alumno y tratamos de iniciar sesión con marinapg.

Nos hemos conectado y nos salimos

Caso práctico 3. Iniciando sesión sin contraseña

Podemos iniciar sesión en un equipo remoto a través de ssh sin necesidad de utilizar una contraseña de conexión cada vez que tratemos de iniciar sesión. Por supuesto para que sea segura la conexión tendremos que utilizar algún mecanismo que nos permita proporcionar seguridad.

Vamos a utilizar criptografía asimétrica para garantizar la seguridad de la conexión. La fuerza de la seguridad de nuestro sistema radicará entonces en las medidas de seguridad que tengamos en la cuenta local.

Es decir, si alguien consigue acceder a nuestra cuenta local en el sistema Debian 12 XFCE, tendrá acceso directo al servidor.

El primer paso será generar un par de claves privada y pública. Vamos a utilizar ssh-keygen.

Nosotros vamos a utilizar el programa ssh-keygen de forma super secilla.

Hemos generado un par de claves pública y privada sin cifrar, porque queremos evitar tener que escribir una y otra vez la contraseña. Ojo! La seguridad de este par de claves asimétrica está en la seguridad que tenga la cuenta del usuario alumno en el equipo Debian 12 xfce.

Ahora vamos a copiar la clave pública al equipo destino de las conexiones. Para ello utilizaremos ssh-copy-id.

Ya no tenemos que escribir contraseñas para conectarnos a la máquina 192.168.26.250 con el usuario alumno.

Caso práctico 4. Conectarnos con un nombre de máquina

Queremos conectarnos al servidor linux srv01 a través de su nombre. Cómo no tenemos un servidor DNS que identifique a este equipo vamos a editar el fichero que implementa la resolución estática local de nombres: /etc/hosts

Ahora podemos escribir srv01 y el sistema operativo resolverá ese nombre con la dirección IP asociada en el fichero /etc/hosts

Caso práctico 5. Configura el servidor para que solo permita conexiones de los miembros del grupo admins

  1. Nos conectamos al servidor de forma remota y segura.
  2. Creamos un grupo llamado admins.
  3. Añadimos a alumno y root al grupo admins.
  4. Configuramos el fichero de configuración del servicio ssh para que solo se puedan conectar de forma remota los usuarios que pertenezcan al grupo admins.
  5. Reiniciamos el servidor SSH.

Nos conectamos al servidor de forma remota y segura.

Creamos un grupo llamado admins y añadimos a alumno y root al grupo admins.

Configuramos el fichero de configuración del servicio ssh para que solo se puedan conectar de forma remota los usuarios que pertenezcan al grupo admins.

Necesitamos conocer cuál es el fichero de configuración del servidor SSH. Vamos a tirar un poco de intuición de administrador de sistemas. Los ficheros de configuración se almacenan por defecto en /etc habitualmente dentro de un directorio propio del servicio o aplicación.

El fichero con la d indica que es un daemon, y cómo ya sabemos, Jorge, un Daemon en los S.O. Unix-Like es un servicio. Un servicio es un programa que se ejecuta en segundo plano.

Vamos a mostrar el contenido del fichero sin mostrar comentarios y comprimiendo o eliminando saltos de línea contiguos.

A ver, para echar un vistazo a la configuración actual, está genial, pero los comentarios del fichero de configuración del servidor ssh nos vienen muy bien para entender qué hacen ciertos parámetros de configuración.

No obstante, cómo somos administradores ávidos de conocimientos, vamos a echar un vistazo a la página de manual de sshd

Vamos a configurar nuestro servidor para que solo permita a los miembros del grupo admins.

Reiniciamos el servidor SSH.

Pero vamos a ver… si hemos reiniciado el servicio, porque seguimos conectados?

Lo que hemos reciniciado es el servidor que está esperando conexiones. Cada vez que se inicia una conexión, el servidor crea un proceso nuevo para dar servicio a esa conexión. Vamos a ejecutar un ps -A | grep ssh.

Cerramos sesión ssh y volvemos a conectarnos, pero esta vez con marinapg

No me deja entrar con marinapg, porque no pertenece al grupo admins. La vamos a añadir en un momento.

Vamos a intentarlo de nuevo.

Caso práctico 6. Cambiar el puerto de escucha en el servidor

Vamos a configurar nuestro servidor ssh para que escuche peticiones desde el puerto 6054.

Esto se suele hacer para dificultar un poco, solo un poco, los intentos de acceso no autorizados.

Ahora vamos a conectarnos desde el cliente.

Caso práctico 7. Conectándonos a un servidor ssh con un puerto no estándar

Vamos a configurar el cliente ssh para que cada vez que nos conectemos al equipo srv01 o a la dirección ip 192.168.26.250, se utilice el puerto 6054 en lugar del 22.

CUIDADO! Estamos en el servidor!

Vamos a probar 🙂

Vamos a probar con la dirección IP

Caso práctico 8. Copiando un fichero a el sistema remoto

Podemos utilizar el comando scp para copiar ficheros hacia y desde un equipo remoto utilizando ssh.

Necesitamos que el equipo remoto al que nos vamos a conectar tenga instalado y configurado un servidor ssh, como es el caso de nuestro equipo srv01.

Vamos a copiar un script, newUserList.sh al equipo servidor.

Vamos a conectarnos y comprobamos que se han copiado los dos ficheros, uno con el mismo nombre que el origen y otro con el nuevo nombre script.sh

Vamos a crear un fichero saludo.txt que contenga tu nombre de pila.

Vamos a copiar un fichero como otro usuario, en este caso marinapg.

Caso práctico 9. Ejecutando un comando de forma remota

Habrá ocasiones en las que queramos conectarnos a un sistema remoto tan solo para ejecutar un comando. En este caso, no hace falta que iniciemos sesión, ejecutemos y cerremos. Podemos ejecutar un solo comando con ssh.

Caso práctico 10. Instalar un servidor web en nuestro servidor remoto

Supongamos que queremos instalar los siguientes paquetes en nuestro servidor debian srv01

Vamos a ver si ha funcionado 🙂