Cómo crear claves públicas y privadas con SSH para acceder a nuestro servidor

Aprenderemos de manera sencilla como crear un par de llaves públicas/privadas para su posterior utilización como método de autenticación contra nuestro equipo remoto Linux mediante SSH.

El uso de SSH como medida de logueo en máquinas remotas no es algo que usen solo los más pros. Es un método de acceso a máquinas remotas, y que, tal y como dice su nombre, se trata de una Shell segura (Secure Shell). De ahí que su uso se haya expandido masivamente como el método preferido ante conexiones con el equipo que actúa de servidor, ya que se trata de un protocolo seguro que nos blindará la conexión sin que terceros puedan interceptar en ella.

El método más extendido de autenticación es introducir la clave del usuario en cuestión al que queremos atacar – acceder -. Sin embargo, existen otros métodos más seguros y fiables que reforzarán todo esto aún más. Se trata de la generación de un par de llaves pública/privada cuya misión es que se pueda acceder sólo si disponemos de dicho par . Además, si configuramos el equipo SSH (openssh-server) de manera adecuada esta premisa se cumplirá a rajatabla, pues podremos desactivar la autenticación con clave de usuario, que sería reemplazada por este tipo de acceso.

Requisitos

  • Deberemos tener una máquina que actúe como servidor, al menos de SSH, para poder acceder a ella
  • Una máquina, que usaremos como cliente, para acceder al equipo. En las distribuciones Linux el paquete openssh-client ya se encuentra instalado

Comprobando la existencia de openssh-server

Antes de proceder nos aseguraremos de la existencia de este paquete. Para ello, abriremos una terminal y ejecutaremos:

sudo systemctl status ssh

Si nos aparece un mensaje similar a Unit ssh.service could not be found , será un síntoma de la ausencia de tal paquete. Para instalarlo haremos un:

sudo apt-get install openssh-server

Listo, ahora si volvemos a ejecutar systemctl status ssh nos deberá aparecer algo similar a esto:

● ssh.service – OpenBSD Secure Shell server

Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)

Active: active (running) since Wed 2019-03-20 19:54:53 CET; 13min ago

Docs: man:sshd(8)

man:sshd_config(5)

Main PID: 6272 (sshd)

Tasks: 1 (limit: 1117)

Memory: 880.0K

CGroup: /system.slice/ssh.service

└─6272 /usr/sbin/sshd -D

mar 20 19:54:53 lubuntu systemd[1]: Starting OpenBSD Secure Shell server…

mar 20 19:54:53 lubuntu sshd[6272]: Server listening on 0.0.0.0 port 22.

mar 20 19:54:53 lubuntu sshd[6272]: Server listening on :: port 22.

mar 20 19:54:53 lubuntu systemd[1]: Started OpenBSD Secure Shell server.

Generando el par de llaves

Realizado el punto de comprobación anterior procederemos a la creación de la llave.

En una máquina, preferiblemente en la que actuará de cliente, volveremos a recurrir a nuestra aliada, la terminal. Y teclearemos:

ssh-keygen -t rsa

Podemos elegir entre varios formatos de encriptación, entre ellos DSA. Como queráis podéis usar cualesquiera de los dos, pero por norma general RSA nos dará mayor fiabilidad dada su potente encriptación.

Ejecutado el comando, se mostrará:

Generating public/private rsa key pair.

Enter file in which to save the key (/home/myhome/.ssh/id_rsa):

De dejarlo por defecto las llaves se guardarán en el directorio oculto .ssh. Si queremos otra ruta, u otro nombre, se especificará.

A modo de comprensión el nombre que le he dado es key_prueba. Acto seguido nos preguntará si queremos introducir la clave pasarela. Esto reforzará aún más el acceso ya que, si alguien dispone de nuestra clave privada aún no podría acceder al no conocer la clave. En este caso la dejaré en blanco. Basta con pulsar la tecla intro dos veces. Y concluirá el proceso con la generación del par público/privado, que tendrá una longitud de 2048 bits por defecto.

Pasando la clave pública al equipo servidor

En el proceso anterior nos encontraremos con dos situaciones:

  • si no especificamos nombre ni ruta se generarán dos archivos, id_rsa e id_rsa.pub en el directorio .ssh
  • si lo especificamos, como es nuestro caso, se habrán generado dos archivos nuevos dentro del home de nuestro usuario: key_prueba y key_prueba.pub

El fichero con la extensión .pub será la clave pública y la que deberemos pasar al archivo authorized_keys de nuestro ordenador. Para automatizar y simplificar este proceso nos apoyaremos en el comando ssh-copy-id para enviar el archivo al servidor. Se usa de la siguiente manera:

ssh-copy-id -i /ruta/hacia/el/archivo/extension/.pub usuario@host

Para que lo comprendáis, y en mi caso, sería:

ssh-copy-id -i /home/myhome/key_prueba.pub server@192.168.1.39

Tecla intro y acto seguido nos preguntará la clave del usuario server del equipo servidor. La introduciremos y la clave pública se añadirá en el archivo authorized_keys del equipo remoto.

Accediendo mediante la clave privada

Si habéis realizado los pasos al pie de la letra no deberíais de haber tenido ningún problema. Con todo ya realizado ahora sí que sí llegó el momento: nos autenticaremos a través de la llave privada.

La sintaxis de uso del comando ssh con la opción de clave privada es la siguiente:

ssh usuario@host -i /ruta/hacia/el/archivo/sin/extension/.pub

Aquí será obligatorio usar la clave privada, es decir, aquella con el mismo nombre pero que no tiene el .pub en el final del archivo. En mi caso sería:

ssh server@192.168.1.39 -i /home/myhome/key_prueba

De no haber introducido la clave pasarela durante la creación de la llave simplemente se hará inicio de sesión tras la ejecución del comando anterior.

¡Muy bien cocos! Habéis aprendido a crear llaves para su uso como sistema de autenticación de una manera sencilla y sin complicaciones. En próximos artículos veremos como sacarle aún más partido a SSH con medidas como reforzar el acceso a nuestro equipo cambiando sus archivos de configuración.

Para cualquier cosa, ya sabéis. Los comentarios están a vuestra entera disposición 😀

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

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