El protocolo SSH (secure shell) es mundialmente usado para establecer comunicaciones seguras entre dos dispositivos de computación; es decir comunicaciones donde los datos viajan a través de un medio público innatamente inseguro como la Internet sin que puedan ser interceptadas ni descifradas por terceros.
Dos de los mecanismos de comunicación más comunes en los que se utiliza SSH son (1) la terminal remota de comandos y (2) la transferencia de archivos.
En este artículo elaboramos algunos de los aspectos fundamentales de este protocolo y de cómo se puede implementar de manera práctica el intercambio de archivos de forma segura.
La siguiente imagen ilustra la configuración cliente/servidor mediante herramientas cliente y herramientas servidor para una interacción SSH.
En esta ilustración del lado del servidor vemos al software OpenSSH que utiliza una llave pública perteneciente al cliente. Del lado del cliente vemos varias aplicaciones tipo cliente SSH (FileZilla, WinSCO, PuTTY) que utilizan una llave privada propia del cliente también para cifrar sus mensajes que son transmitidos a través de una red insegura como la Internet de forma cifrada.
Principales Componentes
A grosso modo, los principales componentes de una implementación SSH son:
- Servidor SSH: Un servidor es una aplicación o programa de computador que escucha solicitudes provenientes de una red y genera respuestas a esas solicitudes (sirve resultados al cliente). A su vez, un servidor SSH es un servidor que para comunicarse implementa el protocolo SSH antes mencionado. Uno de los programas de servidor SSH más comunes es el sistema OpenSSH disponible en la mayoría de sistemas operativos modernos.
- Cliente SSH: En contraparte, un cliente es una aplicación o programa de computador que genera solicitudes a un programa servidor a través de una red y recibe esas respuestas. Siguiendo la misma línea un cliente SSH es aquel que utiliza el protocolo SSH para tal fin.
- Protocolo SSH: Como ya explicamos anteriormente el protocolo SSH permite el cifrado de datos que son transmitidos a través de una red. Esto se realiza mediante el uso de mecanismos de encriptación asimétrica, para lo cual se utiliza lo que se conoce como llaves asimétricas, que no es más que dos grandes cadenas de texto relacionadas matemáticamente entre sí que permiten cifrar datos en una vía (con una llave) y descifrar esos datos de vuelta con la otra llave.
- Llaves asimétricas: Son las llaves involucradas en la encriptación de datos mediante el modelo de llave pública y llave privada. En síntesis, el cliente mantiene una llave privada (secreta) de su lado con la cual cifra los datos que va a transmitir, los cuales solo podrán ser descifrados con su llave par, denominada llave pública del lado del servidor, la llave pública ha sido previamente compartida con el servidor.
- Autenticación por llaves: Cuando el servidor recibe un mensaje de un cliente A y lo puede descifrar usando la llave pública de este cliente A puede asumir que el mensaje fue emitido por dicho cliente que es el poseedor único de la llave privada con la que se cifró el mensaje.
- Llaves asimétricas: Son las llaves involucradas en la encriptación de datos mediante el modelo de llave pública y llave privada. En síntesis, el cliente mantiene una llave privada (secreta) de su lado con la cual cifra los datos que va a transmitir, los cuales solo podrán ser descifrados con su llave par, denominada llave pública del lado del servidor, la llave pública ha sido previamente compartida con el servidor.
La figura 1 anterior ilustra el proceso de cifrado > comunicación > descifrado
de un mensaje del cliente al servidor usando llaves publica y privada previamente generadas. Usualmente el par de llaves se genera en el lado del cliente a fin de mantener la llave privada confinada a dicho dispositivo.
Principales Procesos
Dentro de los principales procesos involucrados en la implementación de comunicaciones por protocolo SSH, tenemos los siguientes:
- Instalación del Servidor SSH
- Instalación del Cliente SSH
- Generación de pares de llaves
- Configuración del lado del servidor
- Configuración del lado del cliente
- Comunicación por terminal remota
- Comunicación para transferencia de archivos
En las siguiente sub-secciones abordaremos estos procesos de forma práctica.
Instalación de Servidor SSH
Como acotamos anteriormente, un servidor SSH es un pequeño programa de computador enfocado en recibir solicitudes a través de una red y generar respuestas a esas solicitudes, utilizando protocolo SSH o alguno de sus derivados o extensiones.
Uno de los más populares es OpenSSH.
En esta ocasión vamos a realizar la instalación de OpenSSH en un servidor Ubuntu para un computador de tipo Raspberry PI, basándonos en un tutorial que encontramos, que realiza la instalación en 3 pasos:
PASO 1: Instalar OpenSSH
Para instalar OpenSSH en Ubuntu Linux es necesario ejecutar los siguientes comandos de terminal:
sudo apt update sudo apt install openssh-server
PASO 2: Verificar que el servicio esté funcionando
Una vez terminada la instalación podemos verificar que el servicio esté funcionando mediante el comando sudo systemctl status ssh
El resultado debe lucir así:
server systemd[1]: Starting OpenBSD Secure Shell server... server sshd[3702]: Server listening on 0.0.0.0 port 22. server sshd[3702]: Server listening on :: port 22. server systemd[1]: Started OpenBSD Secure Shell server.
En el caso de Ubuntu Linux que estamos ejemplificando, eso bastaría para considerar el servidor instalado y funcionando. El servidor SSH escuchará solicitudes en el puerto TCP/IP 22 que es el puerto estándar para conexiones SSH.
PASO 3: Habilitar el puerto SSH en Ubuntu Firewall
Es necesario asegurarnos que el software de protección Firewall de Ubuntu esté configurado para permitir el tráfico de tipo SSH. Para esto ejecutamos el comando sudo ufw allow ssh
a lo que el sistema debería responder con un mensaje de Rules Updated
Instalación de Clientes SSH (PuTTY, WinSCP, FileZilla)
Para este ejemplo vamos a explorar tres herramiantas: PuTTY, WinSCP y FileZilla)
Instalación de PuTTY en Windows
PuTTY es una herramienta que permite implementar una terminal de comandos en diversos protocolos y tipos de servidor. En nuestro caso vamos a usar PuTTY para comunicarnos con el servidor OpenSSH que instalamos en el RaspberryPI del punto 1).
Basta con acceder al sitio web de PuTTY y descargar la versión más apropiada para tu sistema operativo Windows que usualmente sería la versión más reciente de 64bits en formato .msi
.
Una vez instalada podrás acceder a la aplicación usando el ícono de PuTTY como se muestra en la siguiente ilustración.
Más adelante discutiremos la configuración de PuTTY para poder establecer comunicación con nuestro servidor OpenSSH.
Instalación de WinSCP (Windows Secure Copy)
WinSCP es una aplicación para el sistema operativo Microsoft Windows que se utiliza para gestionar transferencia de archivos con diversos protocolos.
Para instalarlo solo es cuestión de descargar el archivo MSI respectivo del sitio de descargas de WinSCP
Una vez instalado podemos acceder al programa mediante el menú de Windows.
WinSCP es una herramienta muy poderosa que permite automatizar interacciones de transferencia de archivos de forma sumamente versatil.
Instalación de FileZilla
La tercera herramienta que vamos a explorar es FileZilla que es similar a WinSCP. De nuevo, basta con descargar el instalador desde el sitio de descargas y ejecutarlo. Cabe aclarar que hay varias ediciones de FileZilla, desde la edición simple gratuita hasta dos ediciones de paga.
Al igual que en los ejemplos anteriores el FileZilla se puede cargar en Windows mediante el menu de inicio.
Generación de Pares de Llaves, Protocolos y Formatos
Vamos a dejar de lado a las aplicaciones cliente SSH para echar un vistazo a las llaves de encriptación. Hay diversas formas de generar pares de llaves de encriptación. Una de las más populares es la aplicación PuTTYGen o PuTTY Key Generator.
Esta aplicación para el sistema operativo Windows permite generar llaves criptográficas en pares que pueden ser usados ya sea por PuTTY u otros clientes SSH.
Para instalarlo basta con descargar el archivo instalador del sitio de descargas y ejecutarlo en tu sistema Windows.
Como en los casos anteriores, podemos invocarlo mediante la tecla Windows.
PuTTYGen soporta la creación de llaves criptográficas en diversos formatos. Para generar un juego de llaves basta con:
- Abrir PuTTYGen
- Seleccionar el tipo de llave
- Seleccionar el tamaño de la llave en bits
- Hacer clic en el botón «Generate»
- Agregar «aleatoriedad» al proceso moviendo el ratón sobre el área designada.
Una vez concluido el proceso se puede ya sea almacenar la llave pública, o la llave privada ya sea con o sin una frase clave. Tambien es posible convertir la llave privada a diversos formatos.
¿Qué son las llaves? Bueno son códigos de texto particularmente largos que permiten cifrar o descifrar datos.
Nuestra llave privada de ejemplo en formato PuTTY luce así (my_private_key.ppk
):
PuTTY-User-Key-File-3: ssh-rsa Encryption: none Comment: rsa-key-20210806 Public-Lines: 6 AAAAB3NzaC1yc2EAAAADAQABAAABAQCUGLh/YZkxGP6/EoJMPpLE7XFMfTgLzHFZ PI5hK5djyWESCTXbY8v2Q2cPfvjuyc1gfiQvBFoT/ADRwJqkjDMuSYx0BPeYBJYI x9SpSNshOLvKmYJlTMEmCveSoSHO9UBxXXXtjOJFMm1D5FGXM+zsQxmhJtOMbq58 jMXLu8qaqeNwrXY04BueYd0oV47YNwMJnYh6+RAmdpkUVDL48YUwkhxAqO0XW8dM 7JxtP1CmS5EgP0/r4wiI03i+RM2vUAPJpmWJXe3W1z6MSmoYtWuJSyEWLgz9JYYh UKHBrSyuZx+xazYkP5mfwN2t7zMcCMkB5ePwPYK3BuESoxo5dLcp Private-Lines: 14 AAABAQCFzug0P6y4TcsuPLz5wre9soPiBmmzT19Cr5I9fbNld7h7IVNGDJ9mvHPL 7n9g0Xj9LDvpN1dkIxdibVHMRtifg9ihozNKaSpeeJ9O7QMAu1ABuD225WjGxLX4 CBqR8cnuI/G/VsHCn9NVul917Hau6dmoX3pYslB5PIAimmRu5JZ7MW7fIYTJWggN /W41HlBBkynP5dzlRiCUn3KEIlc+MEdehx0dGPlQ0ID7UGFBBUQaSb2O//rG9v1y o8LyMePb6XYWu/VJICQrIePRw+MqXUCZASiIpzZopAlAet7tIvfEM0GfVoYDMBYu Ww1YOV1JDdS3wpawW0sTYy2VyH5hAAAAgQDszfna9o2A9x/sLHTPZ4hKS3uVSShV 30Tei/8qGeJxK64XLTE5mXmRNFcLqvq4E6jhhnuTBapCQwJjEb6QzsPy5SCrdNFS ZkVV9geaEQnzD1zF/PkGLveYJ0qWdZLqdmCrbTzUh2yj0LTKKmvAnA7PDxMbTPz3 eGIv4iRQ6wx4tQAAAIEAoBnuExDOJatwYoOEwiTo+f2O1t0dV36QC+KcegOR3pJ4 5iKP/bIrVXeB52p5HO3Pyli1Tq+91FP45E/jWKIHUH948nsxYHTg4YsJldTG9EKO cY12Nx+Y0Hdn9W+53m/fw+5b9VQfbv3/cAfNGa9kMYBLVe8CDY/uHOfn6oxeUSUA AACBAJxKj5n5Y+kdK6m4znnNItHECe73BbuAh2GGu6nTJ6dlv9POdp/W8fLEsMjA 2NSD945VHlqDLpyRuS+joQ2WhA6eTRIrQbDPsluQLd2INIRJdJtDwQOKqbUbsPnr rXjKo7xQf31lqCFZ76OIrlJN+b7rOlCKd09tw4JanshI+EvV Private-MAC: eb9627f4c9f16085f5de9047a59ea6dd3aba9938b009efb81ed7916bde2ebe23
Nótese que podemos convertir nuestra llave privada a diversos otros formatos de interés.
Misma llave privada en formato OpenSSH (my_private_key_openssh.txt
)
-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAlBi4f2GZMRj+vxKCTD6SxO1xTH04C8xxWTyOYSuXY8lhEgk1 22PL9kNnD3747snNYH4kLwRaE/wA0cCapIwzLkmMdAT3mASWCMfUqUjbITi7ypmC ZUzBJgr3kqEhzvVAcV117YziRTJtQ+RRlzPs7EMZoSbTjG6ufIzFy7vKmqnjcK12 NOAbnmHdKFeO2DcDCZ2IevkQJnaZFFQy+PGFMJIcQKjtF1vHTOycbT9QpkuRID9P 6+MIiNN4vkTNr1ADyaZliV3t1tc+jEpqGLVriUshFi4M/SWGIVChwa0srmcfsWs2 JD+Zn8Ddre8zHAjJAeXj8D2CtwbhEqMaOXS3KQIDAQABAoIBAQCFzug0P6y4Tcsu PLz5wre9soPiBmmzT19Cr5I9fbNld7h7IVNGDJ9mvHPL7n9g0Xj9LDvpN1dkIxdi bVHMRtifg9ihozNKaSpeeJ9O7QMAu1ABuD225WjGxLX4CBqR8cnuI/G/VsHCn9NV ul917Hau6dmoX3pYslB5PIAimmRu5JZ7MW7fIYTJWggN/W41HlBBkynP5dzlRiCU n3KEIlc+MEdehx0dGPlQ0ID7UGFBBUQaSb2O//rG9v1yo8LyMePb6XYWu/VJICQr IePRw+MqXUCZASiIpzZopAlAet7tIvfEM0GfVoYDMBYuWw1YOV1JDdS3wpawW0sT Yy2VyH5hAoGBAOzN+dr2jYD3H+wsdM9niEpLe5VJKFXfRN6L/yoZ4nErrhctMTmZ eZE0Vwuq+rgTqOGGe5MFqkJDAmMRvpDOw/LlIKt00VJmRVX2B5oRCfMPXMX8+QYu 95gnSpZ1kup2YKttPNSHbKPQtMoqa8CcDs8PExtM/Pd4Yi/iJFDrDHi1AoGBAKAZ 7hMQziWrcGKDhMIk6Pn9jtbdHVd+kAvinHoDkd6SeOYij/2yK1V3gedqeRztz8pY tU6vvdRT+ORP41iiB1B/ePJ7MWB04OGLCZXUxvRCjnGNdjcfmNB3Z/Vvud5v38Pu W/VUH279/3AHzRmvZDGAS1XvAg2P7hzn5+qMXlElAoGAX7+tLkcQ0juaEcGr/YzM Q9Yfgy5Qe+BKFX4fz2Ml90KFIuPoCnUu/XJfW91ngPSaDY51+u2IeUBk/6/WEPE5 s8XHnuweEyY9FNPlIPuQvVHR3lA6VLC69i+07f9eRyVUUxxZQ0n6uIYUA8aBSSEQ r9JVlG1dv6ZSdTAIJRvVMB0CgYBao7N8ScRb4T5kF49elqTrexiWHmLROQ72G5p5 HXJE7unRaHnaqDcOUPVTfZ0Jur0sEqK65JX1EoFTSMMuV7UKZtCjfwlKUYFLT3ri v67PdKrOMMdfl9zdEOzjMBirjOzDMTwQnUqafORTmacNRpXTzI1aHlEsOnMVHFnZ GRUAnQKBgQCcSo+Z+WPpHSupuM55zSLRxAnu9wW7gIdhhrup0yenZb/Tznaf1vHy xLDIwNjUg/eOVR5agy6ckbkvo6ENloQOnk0SK0Gwz7JbkC3diDSESXSbQ8EDiqm1 G7D56614yqO8UH99ZaghWe+jiK5STfm+6zpQindPbcOCWp7ISPhL1Q== -----END RSA PRIVATE KEY-----
Misma llave privada en formato «OpenSSH nuevo» (my_private_key_openssh_nf.txt
)
-----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdz c2gtcnNhAAAAAwEAAQAAAQEAlBi4f2GZMRj+vxKCTD6SxO1xTH04C8xxWTyOYSuX Y8lhEgk122PL9kNnD3747snNYH4kLwRaE/wA0cCapIwzLkmMdAT3mASWCMfUqUjb ITi7ypmCZUzBJgr3kqEhzvVAcV117YziRTJtQ+RRlzPs7EMZoSbTjG6ufIzFy7vK mqnjcK12NOAbnmHdKFeO2DcDCZ2IevkQJnaZFFQy+PGFMJIcQKjtF1vHTOycbT9Q pkuRID9P6+MIiNN4vkTNr1ADyaZliV3t1tc+jEpqGLVriUshFi4M/SWGIVChwa0s rmcfsWs2JD+Zn8Ddre8zHAjJAeXj8D2CtwbhEqMaOXS3KQAAA9Cucdp5rnHaeQAA AAdzc2gtcnNhAAABAQCUGLh/YZkxGP6/EoJMPpLE7XFMfTgLzHFZPI5hK5djyWES CTXbY8v2Q2cPfvjuyc1gfiQvBFoT/ADRwJqkjDMuSYx0BPeYBJYIx9SpSNshOLvK mYJlTMEmCveSoSHO9UBxXXXtjOJFMm1D5FGXM+zsQxmhJtOMbq58jMXLu8qaqeNw rXY04BueYd0oV47YNwMJnYh6+RAmdpkUVDL48YUwkhxAqO0XW8dM7JxtP1CmS5Eg P0/r4wiI03i+RM2vUAPJpmWJXe3W1z6MSmoYtWuJSyEWLgz9JYYhUKHBrSyuZx+x azYkP5mfwN2t7zMcCMkB5ePwPYK3BuESoxo5dLcpAAAAAwEAAQAAAQEAhc7oND+s uE3LLjy8+cK3vbKD4gZps09fQq+SPX2zZXe4eyFTRgyfZrxzy+5/YNF4/Sw76TdX ZCMXYm1RzEbYn4PYoaMzSmkqXnifTu0DALtQAbg9tuVoxsS1+AgakfHJ7iPxv1bB wp/TVbpfdex2runZqF96WLJQeTyAIppkbuSWezFu3yGEyVoIDf1uNR5QQZMpz+Xc 5UYglJ9yhCJXPjBHXocdHRj5UNCA+1BhQQVEGkm9jv/6xvb9cqPC8jHj2+l2Frv1 SSAkKyHj0cPjKl1AmQEoiKc2aKQJQHre7SL3xDNBn1aGAzAWLlsNWDldSQ3Ut8KW sFtLE2Mtlch+YQAAAIEAnEqPmflj6R0rqbjOec0i0cQJ7vcFu4CHYYa7qdMnp2W/ 0852n9bx8sSwyMDY1IP3jlUeWoMunJG5L6OhDZaEDp5NEitBsM+yW5At3Yg0hEl0 m0PBA4qptRuw+euteMqjvFB/fWWoIVnvo4iuUk35vus6UIp3T23DglqeyEj4S9UA AACBAOzN+dr2jYD3H+wsdM9niEpLe5VJKFXfRN6L/yoZ4nErrhctMTmZeZE0Vwuq +rgTqOGGe5MFqkJDAmMRvpDOw/LlIKt00VJmRVX2B5oRCfMPXMX8+QYu95gnSpZ1 kup2YKttPNSHbKPQtMoqa8CcDs8PExtM/Pd4Yi/iJFDrDHi1AAAAgQCgGe4TEM4l q3Big4TCJOj5/Y7W3R1XfpAL4px6A5HeknjmIo/9sitVd4Hnankc7c/KWLVOr73U U/jkT+NYogdQf3jyezFgdODhiwmV1Mb0Qo5xjXY3H5jQd2f1b7neb9/D7lv1VB9u /f9wB80Zr2QxgEtV7wINj+4c5+fqjF5RJQAAABByc2Eta2V5LTIwMjEwODA2AQID BAUGBwgJ -----END OPENSSH PRIVATE KEY-----
Misma llave privada en formato «ssh.com»: (my_private_key_ssh.com.txt
)
---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ---- Comment: "rsa-key-20210806" P2/56wAAA+4AAAA3aWYtbW9kbntzaWdue3JzYS1wa2NzMS1zaGExfSxlbmNyeXB0e3JzYS 1wa2NzMXYyLW9hZXB9fQAAAARub25lAAADnwAAA5sAAAARAQABAAAIAIXO6DQ/rLhNyy48 vPnCt72yg+IGabNPX0Kvkj19s2V3uHshU0YMn2a8c8vuf2DReP0sO+k3V2QjF2JtUcxG2J +D2KGjM0ppKl54n07tAwC7UAG4PbblaMbEtfgIGpHxye4j8b9WwcKf01W6X3Xsdq7p2ahf eliyUHk8gCKaZG7klnsxbt8hhMlaCA39bjUeUEGTKc/l3OVGIJSfcoQiVz4wR16HHR0Y+V DQgPtQYUEFRBpJvY7/+sb2/XKjwvIx49vpdha79UkgJCsh49HD4ypdQJkBKIinNmikCUB6 3u0i98QzQZ9WhgMwFi5bDVg5XUkN1LfClrBbSxNjLZXIfmEAAAgAlBi4f2GZMRj+vxKCTD 6SxO1xTH04C8xxWTyOYSuXY8lhEgk122PL9kNnD3747snNYH4kLwRaE/wA0cCapIwzLkmM dAT3mASWCMfUqUjbITi7ypmCZUzBJgr3kqEhzvVAcV117YziRTJtQ+RRlzPs7EMZoSbTjG 6ufIzFy7vKmqnjcK12NOAbnmHdKFeO2DcDCZ2IevkQJnaZFFQy+PGFMJIcQKjtF1vHTOyc bT9QpkuRID9P6+MIiNN4vkTNr1ADyaZliV3t1tc+jEpqGLVriUshFi4M/SWGIVChwa0srm cfsWs2JD+Zn8Ddre8zHAjJAeXj8D2CtwbhEqMaOXS3KQAABACcSo+Z+WPpHSupuM55zSLR xAnu9wW7gIdhhrup0yenZb/Tznaf1vHyxLDIwNjUg/eOVR5agy6ckbkvo6ENloQOnk0SK0 Gwz7JbkC3diDSESXSbQ8EDiqm1G7D56614yqO8UH99ZaghWe+jiK5STfm+6zpQindPbcOC Wp7ISPhL1QAABACgGe4TEM4lq3Big4TCJOj5/Y7W3R1XfpAL4px6A5HeknjmIo/9sitVd4 Hnankc7c/KWLVOr73UU/jkT+NYogdQf3jyezFgdODhiwmV1Mb0Qo5xjXY3H5jQd2f1b7ne b9/D7lv1VB9u/f9wB80Zr2QxgEtV7wINj+4c5+fqjF5RJQAABADszfna9o2A9x/sLHTPZ4 hKS3uVSShV30Tei/8qGeJxK64XLTE5mXmRNFcLqvq4E6jhhnuTBapCQwJjEb6QzsPy5SCr dNFSZkVV9geaEQnzD1zF/PkGLveYJ0qWdZLqdmCrbTzUh2yj0LTKKmvAnA7PDxMbTPz3eG Iv4iRQ6wx4tQ== ---- END SSH2 ENCRYPTED PRIVATE KEY ----
Todas las anteriores son representaciones distintas de un mismo conjunto de datos al que llamamos «llave privada». Nótese que en el caso del primer formato «PuTTY» este archivo incluye también la llave pública.
Seguidamente mostramos el contenido de la llave pública correspondiente al guardarlo usando el botón «Save Public Key» de PuTTYGen (my_public_key.txt
)
---- BEGIN SSH2 PUBLIC KEY ---- Comment: "rsa-key-20210806" AAAAB3NzaC1yc2EAAAADAQABAAABAQCUGLh/YZkxGP6/EoJMPpLE7XFMfTgLzHFZ PI5hK5djyWESCTXbY8v2Q2cPfvjuyc1gfiQvBFoT/ADRwJqkjDMuSYx0BPeYBJYI x9SpSNshOLvKmYJlTMEmCveSoSHO9UBxXXXtjOJFMm1D5FGXM+zsQxmhJtOMbq58 jMXLu8qaqeNwrXY04BueYd0oV47YNwMJnYh6+RAmdpkUVDL48YUwkhxAqO0XW8dM 7JxtP1CmS5EgP0/r4wiI03i+RM2vUAPJpmWJXe3W1z6MSmoYtWuJSyEWLgz9JYYh UKHBrSyuZx+xazYkP5mfwN2t7zMcCMkB5ePwPYK3BuESoxo5dLcp ---- END SSH2 PUBLIC KEY ----
Como ya hemos visto, tanto la llave privada como la llave pública pueden describirse en formatos diferentes para diferentes tipos de aplicación o tipos de servidor.
A su vez existen diversos protocolos para la generación de las llaves con PuTTYGen.
- SSH1 – RSA
- SSH2 – DSA
- SSH2 – ECDSA
- SSH2 – EdDSA
Finalmente es importante anotar que solamente se necesitará una versión de la llave privada del lado del cliente, y una de la llave pública del lado del o los servidores a los que queramos conectar el cliente.
Configuración del Lado del Servidor
Volviendo al servidor OpenSSH que instalamos acá, vamos a configurar el sistema para que acepte la llave pública que acabamos de generar. Se trata de un procedimiento sumamente básico: Es cuestión de ir a la carpeta «home» de nuestro usuario en el Raspberry PI y asegurarnos de que hay una carpeta .ssh
dentro. En esa carpeta vamos acrear un archivo authorized_keys
que contenga todas las llaves públicas que nuestro servidor OpenSSH acepta.
El primer paso es copiar a nuestro Raspberry PI el archivo que obtuvimos al guardar la llave pública con PuTTYGen, que en nuestro caso se llama my_public_key.pub
.
Un detalle importante es que el archivo de llave pública que generamos con PuTTYGen no es compatible con OpenSSH, por lo que es necesario transformar el archivo a un formato compatible con OpenSSH. Para esto ejecutamos en el Raspberry PI el comando ssh-keygen -i -f my_public_key.pub > my_public_key_openssh.pub
.
Los siguientes dos listados muestran el contenido de ambos archivos:
my_public_key.pub
---- BEGIN SSH2 PUBLIC KEY ---- Comment: "rsa-key-20210806" AAAAB3NzaC1yc2EAAAADAQABAAABAQCUGLh/YZkxGP6/EoJMPpLE7XFMfTgLzHFZ PI5hK5djyWESCTXbY8v2Q2cPfvjuyc1gfiQvBFoT/ADRwJqkjDMuSYx0BPeYBJYI x9SpSNshOLvKmYJlTMEmCveSoSHO9UBxXXXtjOJFMm1D5FGXM+zsQxmhJtOMbq58 jMXLu8qaqeNwrXY04BueYd0oV47YNwMJnYh6+RAmdpkUVDL48YUwkhxAqO0XW8dM 7JxtP1CmS5EgP0/r4wiI03i+RM2vUAPJpmWJXe3W1z6MSmoYtWuJSyEWLgz9JYYh UKHBrSyuZx+xazYkP5mfwN2t7zMcCMkB5ePwPYK3BuESoxo5dLcp ---- END SSH2 PUBLIC KEY ----
my_public_key_openssh.pub (compatible con openssh)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCUGLh/YZkxGP6/EoJMPpLE7XFMfTgLzHFZPI5hK5djyWESCTXbY8v2Q2cPfvjuyc1gfiQvBFoT/ADRwJqkjDMuSYx0BPeYBJYIx9SpSNshOLvKmYJlTMEmCveSoSHO9UBxXXXtjOJFMm1D5FGXM+zsQxmhJtOMbq58jMXLu8qaqeNwrXY04BueYd0oV47YNwMJnYh6+RAmdpkUVDL48YUwkhxAqO0XW8dM7JxtP1CmS5EgP0/r4wiI03i+RM2vUAPJpmWJXe3W1z6MSmoYtWuJSyEWLgz9JYYhUKHBrSyuZx+xazYkP5mfwN2t7zMcCMkB5ePwPYK3BuESoxo5dLcp
Nótese que la cadena que comienza en AAAAB3Nz
y termina en 5dLcp
es la misma para ambos archivos. Asi entonces la llave criptográfica es la misma, pero el formato es diferente.
Para agregar la llave a nuestro archivo authorized_keys
simplemente ejecutamos el siguiente comando:
cat my_public_key_openssh.pub >> ~/.ssh/authorized_keys
Dicho comando agrega el contenido de my_public_key_openssh.pub
al archivo authorized_keys
situado en la carpeta .ssh
ubicada en la carpeta home
del usuario actual.
De esta forma, si el archivo no existia o si estaba vacío su contenido coincidirá con el de nuestra llave pública convertida a formato OpenSSH.
Si el archivo ya tenía datos, nuestra llave pública estará ahora al final del archivo.
En este punto, nuestro servidor está listo para recibir solicitudes de un cliente que esté configurado con nuestra llave privada.
Configuración del Lado del Cliente
Configuración de PuTTY
Como hemos mencionado antes, PuTTY es un programa cliente de terminal remota. Vamos a configurarlo para poder acceder a nuestro Raspberry PI usando la llave privada que generamos anteriormente.
PASO 1: Definimos una conexión SSH, suministrando la dirección IP de nuestro RaspberryPI en nuestra red local y el puerto predeterminado para SSH que es 22. Daremos a nuestra configuración el nombre de rpi4_ssh_demo
.
PASO 2: Seguidamente configuramos nuestra llave privada:
PASO 3: Finalmente Guardamos la configuración
Para esto regresamos a la categoría Session
y hacemos clic en el botón «Save»
Listo, en este punto podemos hacer clic en «Open» para iniciar la terminal remota en nuestro servidor Raspberry PI.
El sistema podría presentarnos algunos avisos, tales como una confirmación de la firma digital del servidor y nos preguntará el usuario al que queremos acceder.
Configuración de WinSCP
En el caso de WinSCP, la configuración es parecida. Consiste en establecer el tipo de conexión como SFTP, definir la dirección IP y el puerto y elegir el archivo de llave privada.
Para elegir el archivo de llave privada es necesario hacer clic en «Advanced»
Una vez elegido el archivo, hacemos clic en OK y luego en SAVE, suministramos un nombre para la conexión y luego hacemos clic en LOGIN. ¡Listo! Tenemos una conexión SFTP operando con WinSCP hacia nuestro servidor RaspberryPI sobre OpenSSH.
Configuración de FileZilla
En el caso de FileZilla es exactamente el mismo proceso:
- Crear una nueva conexión de tipo SFTP
- Definir dirección IP y puerto
- Elegir la llave privada
- Guardar y conectar
En Resumen
En este artículo exploramos una descripción del protocolo SSH para comunicación cifrada entre computadores, algunas de las principales herramientas de servidor como son OpenSSH y ssh-keygen y algunas herramientas cliente como son PuTTY, PuTTYGen, WinSCP y FileZilla.
También exploramos los mecanismos para generar pares de llaves (privada/pública) diferentes protocolos disponibles, formatos de archivos de llave, así como la configuración de las diferentes herramientas para establecer conexiones de tipo terminal y de tipo transferencia de archivos.
Referencias:
- SSH – Secure Shell Protocol: https://en.wikipedia.org/wiki/Secure_Shell
- SFTP – SSH File Transfer Protocol: https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol
- FTP over SSH: https://en.wikipedia.org/wiki/File_Transfer_Protocol#FTP_over_SSH
- FTP – File Transfer Protocol: https://en.wikipedia.org/wiki/File_Transfer_Protocol
7,226 total views, 3 views today
Comentarios