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.

Configuración típica cliente/servidor SSH

Principales Componentes

A grosso modo, los principales componentes de una implementación SSH son:

  1. 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.
  2. 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.
  3. 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.
Figura 1 – Proceso de cifrado y descifrado (y autenticación implícita) para el modelo de llave publica y privada

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:

  1. Instalación del Servidor SSH
  2. Instalación del Cliente SSH
  3. Generación de pares de llaves
  4. Configuración del lado del servidor
  5. Configuración del lado del cliente
  6. Comunicación por terminal remota
  7. 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.

Accediendo a la aplicación PuTTY
Accediendo a PuTTY desde la barra de tareas de Windows.

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.

Abriendo WinSCP
Así luce la interfaz gráfica de WinSCP

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.

Abriendo Filezilla en Windows

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.

Invocando PuTTYGen desde el menú de Windows

PuTTYGen soporta la creación de llaves criptográficas en diversos formatos. Para generar un juego de llaves basta con:

  1. Abrir PuTTYGen
  2. Seleccionar el tipo de llave
  3. Seleccionar el tamaño de la llave en bits
  4. Hacer clic en el botón «Generate»
  5. Agregar «aleatoriedad» al proceso moviendo el ratón sobre el área designada.
Generación de un juego de llaves criptográficas con PuTTYGen

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.

Guardando la llave pública y/o privada

¿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.

Configuración Inicial de PuTTY

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:

Configuración de la 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»

Guardar la configuración de PuTTY

Listo, en este punto podemos hacer clic en «Open» para iniciar la terminal remota en nuestro servidor Raspberry PI.

Conexión OpenSSH desde una terminal PuTTY

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.

Configuración Inicial WinSCP

Para elegir el archivo de llave privada es necesario hacer clic en «Advanced»

Elección del archivo de llave privada

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:

  1. Crear una nueva conexión de tipo SFTP
  2. Definir dirección IP y puerto
  3. Elegir la llave privada
  4. Guardar y conectar
Configurando FileZilla

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:

 6,426 total views,  3 views today

0Shares
Última modificación: agosto 6, 2021

Autor

Comentarios

Escribe una respuesta o comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.