Configuración Servidor Debian 10 para administrar en remoto con cliente Ubuntu 20.4 con SSH
En este post veremos que es SSH, como se instala en un servidor Debian 10, generación y configuración de pareja de claves para administrarlo en remoto desde un cliente Ubuntu 20.4.
Con la aparición de los equipos servidores, equipos concebidos para ofrecer diferentes tipos de servicios como FTP para ficheros, Apache o NGINX para servidor web, etc…, se impuso la necesidad de su gestión remota, sin estar físicamente delante del equipo, pues estos, generalmente se encuentran en CPDs remotos.
Vamos a ver como se configura un servidor Debian 10 para poder acceder remotamente a él desde un cliente Ubuntu 20.4.
Si el servidor es CENTOS, el procedimiento sería el mismo, solo cambiaría los comandos de instalación de sshd, como se indicará en su momento.
Contenido
- Que es SSH, para qué sirve.
- Como funciona el protocolo SSH
- Cifrado simétrico
- Cifrado asimétrico
- Función Hash
- Instalar SSH
- Instalar en el servidor sshd
- Instalar el cliente
- Como acceder por SSH
- Los errores más comunes
- Conclusiones
Que es SSH, para qué sirve
SSH (Secure Shell) es un protocolo de red que nos permite el acceso a un servidor remoto para su administración. Si tuviésemos que acceder al lugar (CPD) donde esté el equipo servidor, para hacer cualquier configuración, sería una pérdida de tiempo en los desplazamientos y supondría un problema de seguridad el acceso a los equipos físicos, además podría ser inviable.
Existe un protocolo más antiguo (Telnet), que hoy está en desuso por ser inseguro al enviar y recibir los datos en texto plano sin encriptar, con el riesgo que esto supone si interceptan la comunicación. Podrán capturar la contraseña de forma sencilla y colarse en el servidor.
Por ello SSH vino a sustituir a Telnet. La diferencia sustancial es que SSH utiliza algoritmos de cifrado seguros y si interceptan la comunicación, solo obtendrán una cadena de caracteres sin sentido que no podrán descifrar.
SSH es un protocolo exclusivo de sistemas operativos UNIX, por lo que un servidor SSH se despliega casi exclusivamente en máquinas de este tipo, al menos hasta hace poco tiempo. Ahora ya lo podemos instalar en MACOS y Windows.
Como funciona el protocolo SSH
El protocolo SSH nos permite la conexión con un servidor remoto con un usuario y contraseña. Y lo más importante, la comunicación esta cifrada y es muy segura.
Hay varios tipos de cifrado, podemos comprobarlo revisando los tipos de certificados que nos ofrece el cliente SSH y el servidor al que nos estamos conectando con el comando,
ssh -vv usuario@servidor
Unos apuntes sobre tipos de cifrado
Cifrado simétrico
Dos equipos que se comunican comparten una clave. Conociendo la clave y la forma en que los mensajes son cifrados con ella, se pueden codificar y descodificar.
Cuando nos conectamos por SSH, el equipo que usamos como cliente y el equipo servidor negocian un tipo de cifrado. Por ejemplo: AES, blowfish o arcfour en sus distintas variantes.
Una vez acuerdan el tipo de cifrado, el cliente y el servidor contribuyen a crear una comunicación segura mediante un proceso conocido como algoritmo de intercambio de claves.
Cifrado asimétrico
Este tipo de cifrado consiste en que cada equipo que interviene en la comunicación, tiene dos claves, una pública y otra privada.
La clave privada no es accesible para otros equipos y es con la que se descifran los mensajes. La pública la enviaremos a la ubicación que queramos (normalmente /home) del cliente.
El servidor comprobará que la clave con la que conectamos es correcta y creará un mensaje aleatorio cifrado con la clave pública. Lo enviará al cliente y comprobará que este es capaz de descifrarlo.
Mediante la clave privada se descifrará el mensaje y se devolverá al servidor. Si concuerda con el mensaje que había generado en el servidor, la autenticación será exitosa y tendremos acceso SSH.
Más adelante veremos como se genera y distribuye la pareja de claves.
Función Hash
Las matemáticas definen una función hash como aquella que no tiene inversa. Por ello, un mensaje cifrado con una función hash nunca podrá ser descifrado. Esta función es utilizada en los sistemas UNIX para cifrar las contraseñas de los usuarios.
El protocolo SSH implementa este cifrado en cada uno de los mensajes que se envían entre el cliente y el servidor. Lo primero que hace es, mediante la clave que se ha generado a través del cifrado simétrico, codifica la información que se va a enviar. Una vez tiene el mensaje debidamente preparado, genera un hash único mediante un método preestablecido (md5, sha o el que se haya acordado usar al inicio de la conexión) durante la fase de negociación.
De este modo, cuando el equipo receptor del mensaje comprueba que el mensaje recibido tiene el mismo hash que le ha enviado su interlocutor, sabe que la información es fiable y no ha sido alterada.
Instalar el servidor SSH
En una máquina Debian 10 vamos a instalar un servidor SSH. Y veremos las configuraciones necesarias.
Ejecutamos el siguiente comando, con privilégios de sudo, nos pedirá el password e iniciará la instalación.
sudo apt install -y openssh-server
Si nuestro servidor fuese Red Hat Linux o derivados como CENTOS, el comando sería:
sudo yum install -y openssh-server
Buscamos el fichero de configuración que se encuentra en /etc/ssh/sshd_config. Como vamos a tocar el fichero de configuración, y como una buena práctica, haremos una copia de este fichero antes de modificarlo, como se ve en la siguiente captura.
Una vez asegurado el fichero, por si acaso, lo editamos con nuestro editor favorito. Deberemos cambiar dos parámetros y descomentarlos.
Port 22 PermitRootLogin yes
El puerto 22 es el que utiliza por defecto el protocolo SSH, pero lo podemos cambiar si así lo necesitamos o queremos.
Con la siguiente directiva permitimos que el usuario root se pueda logear con contraseña.
En este fichero tenemos más opciones como, por ejemplo,
- ClientAliveInterval, para establecer un tiempo para la conexión
- PermitEmptyPassword, para permitir o no que algién se pueda logear con contraseña vacía.
- ClienAliveCountMax, para establecer un número máximo de usuarios.
- MaxAuthTries, para limitar el numero de intentos de logueo.
- MaxSessions, para limitar el número de sesiones abiertas.
Tenemos que reiniciar el servicio y a continuación vemos el estado en el que está, con los comandos siguientes:
systemctl restart sshd systemctl status sshd
Si vemos active (running), todo va bien.
Una vez instalado SSH y configurado en el servidor, procedemos a la creación de la pareja de claves con el siguiente comando:
ssh-keygen -t rsa
Obtendremos la siguiente salida,
Las claves generadas las guarda en ~/.ssh/ y son las siguientes:
- id_rsa
- id_rsa.pub
Ya solo nos falta copiar la clave pública al cliente. Lo podemos hacer con este comando:
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@host
No nos olvidemos de cambiar usuario por el que corresponda y host por la ip del servidor o hostname.
O también podemos utilizar el comando scp. En este caso lo vamos a hacer desde el cliente con Ubuntu 20.4, aunque también lo podemos hacer desde el servidor. En mi caso,
scp javier@192.168.1.13:~/.ssh/id_rsa.pub ~/
Como acceder por SSH
Y ya hemos terminado. Podemos acceder al servidor desde el cliente con el siguiente comando, «ssh usuario@host». En mi caso,
ssh javier@192.168.1.13
Nos pedirá la contraseña y accederemos a la terminal del servidor,
Si queremos personalizar un poco más la instalación, podemos incluir un banner que se nos muestre al iniciar sesión en el servidor de manera remota. Para ello ejecutaremos el siguiente comando, con privilegios de root,
echo 'Bienvenido a tu servidor Debian, Javier' >> /etc/motd
O editamos el fichero /etc/motd y añadimos lo que queramos.
Si desde el cliente entramos en el servidor con ssh, como hemos visto antes, obtendremos la siguiente salida,
Y ya podemos operar en remoto con el servidor, como vemos a continuación,
Instalar el cliente
Los sistemas Linux, por defecto, vienen con el cliente SSH instalado, por lo que no tendremos que hacer nada.
Los errores más comunes
Se pueden producir errores en la conexión. Vamos a ver algunos de los más frecuentes y como solucionarlo.
Cuando te conectes, te solicitará la contraseña. En el campo en el que tenemos que introducirla, no nos mostrará indicios de que se este haciendo (mostrar asteriscos u otro caracter) pero no te preocupes. Esto es así por motivos de seguridad y si alguien ve como introduces la contraseña, no sabrá la longitud de la misma.
Una vez logueado, solo tendrás que usar correctamente los comandos según su sintaxis.
Al loguearte la primera vez, te pregunta si quieres guardar su «fingerprint». Esto es la clave pública. Es una medida de seguridad para evitar que un servidor intente suplantar la identidad de otro. El problema viene cuando queremos conectarnos tras haber formateado un servidor y es que el fingerprint ha cambiado.
Evidentemente, por motivos claros, si la huella del servidor cambia, se aborta el intento de conexión. Nos indicará un comando a ejecutar para que podamos forzar el borrado de la huella. Algo parecido a:
ssh-keygen -f "/home/javier/.ssh/known_hosts" -R "servidorDevian.dominio.com"
Y un consejo si estas comenzando con la terminal. A la hora de utilizar la CLI (Command Line Interface), esta nos ofrece mensajes que debemos leer con detalle, ya que la mayoría de errores suelen incluir información sobre el error y como solucionarlo.
Conclusiones
Como hemos visto, para conectar a un servidor remoto, la mejor opción es SSH (también podemos hacerlo con el protocolo Telnet, pero este es inseguro y está obsoleto), pues nos permite una conexión segura encriptando los datos que se transmiten y reciben. Además, la linea de comandos nos ofrece muchas más posibilidades y consumiendo muchísimos menos recursos, que utilizando una interfaz gráfica.
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.