Autenticación SSH basado en Llave Pública (SSH Key)

EL presente instructivo tiene como finalidad la configuración de relación de confianza (no se requiere de password para validar) entre dos servidores (maestro y esclavo) para la conexión de servicio ssh. La conexión es efectuada a través del intercambio de llaves públicas entre servidores.

Se darán a conocer dos (02) formas de establecer la relación de confianza, el método manual y un método más sencillo, con el uso del comando “ssh-copy-id”

Requisitos:

  • Se debe contar con suficiente privilegios para la configuración de aplicativos
  • Se debe contar con instalación del servicio SSH (servidor y cliente)

Plataforma:

  • Equipos de arquitectura 64 bits
  • Sistema operativo ‘GNU/Linux’ Debian versión 8.0 (actualmente estable)

Aplicaciones o configuraciones complementarias:

Escenario:

  • 01 equipo denominado “MAESTRO” con dirección IP 192.168.0.1, con un usuario “postgres”
  • 01 equipo denominado “ESCLAVO” con dirección IP 192.168.0.2, con un usuario “postgres”

NOTA: Para Ambos casos (método manual y utilizando el comando “ssh-copy-id”) se debe generar el par de llaves (pública y privada) para el usuario a conectarse:

GENERAR LLAVE

operador@server:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Nombre del archivo que contendrá el par de llaves, por defecto se crea: “id_rsa” privada y “id_rsa.pub” pública. Presionar enter

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

Colocar contraseña para el par de llaves, por defecto no se coloca contraseñas. Presionar enter

Enter passphrase (empty for no passphrase):

Solicita repetir la contraseña. Presionar enter

Enter same passphrase again:

Ruta (path) donde se almacenará el par de llaves pública y privada, por defecto se guarda en el home del usuario (“%h/.ssh” “~/.ssh”)

Your identification has been saved in /home/operador/.ssh/id_rsa.
Your public key has been saved in /home/operador/.ssh/id_rsa.pub.

Huella digital única que identifica al equipo y la llave creada

The key fingerprint is:
SHA256:FAb/mmGUMUSaRaARDttLWt/GGaQH3YaKKtcngNwdRjk operador@server
The key's randomart image is:
+---[RSA 2048]----+
|  . +o=B@o       |
|   = E Xo=o      |
|..o O.*.B.       |
|...=.+.* +       |
|  .+. . S .      |
|. o o .o +       |
| o   o  o        |
|                 |
|                 |
+----[SHA256]-----+


CONFIGURACION METODO MANUAL:
Relación de confianza entre “Maestro y Esclavo”
Servidor Maestro:

1. Iniciar sesión usuario a generar la llave, em nuestro caso el usuario es “postgres”:

operador@maestro:/# su postgres

2. Genera la llave “PÚBLICA” y “PRIVADA” del usuario “postgres”:

VER PASO “GENERAR LLAVES”

Nota: En éste caso el usuario “postgres” es del manejador de BD postgreSQL y su home (%h) es “/var/lib/postgresql”

3. Copiar llave “PÚBLICA” generada al servidor esclavo:

postgres@maestro:/$ scp /var/lib/postgresql/.ssh/id_rsa.pub usuario_valido@IP_esclavo:/tmp

Servidor Esclavo:

4. Copiar llave “PÚBLICA” deL servidor maestro al archivo especial “authorized_keys” del servidor esclavo:

root@esclavo:/# cat /tmp/id_rsa.pub >> /var/lib/postgresql/.ssh/authorized_keys

5. Comprobar permisos y dueño del archivo:

root@esclavo:/# chow postgres:postgres /var/lib/postgresql/.ssh/authorized_keys
operador@esclavo:/# chmod 644 /var/lib/postgresql/.ssh/authorized_keys

6. Editar archivo configuración sshd:

root@esclavo:/# nano /etc/ssh/sshd_config

7. Agregar o descomentar la siguientes línea:

PubkeyAuthentication yes
AuthorizedKeysFile     %home/.ssh/authorized_keys .ssh/authorized_keys .ssh/authorized_keys2
UseDNS no

8. Reiniciar servicio:

root@esclavo:/# /etc/init.d/ssh restart

Nota: hasta este punto ya existe una relación de confianza entre el servidor maestro y el servidor esclavo

9. Comprobar: Conexión vía ssh con el usuario postgres, entre el servidor maestro y el servisor esclavo

postgres@maestro:/$ ssh postgres@IP_esclavo

9.1. Para forzar la lectura de la llave creada se puede utilizar la siguiente opción:

postgres@maestro:/$ ssh postgres@IP_esclavo -i ~/.ssh/id_rsa

Nota: Acá se coloca como parámetro la ruta de la llave “PRIVADA”. En éste caso utilizamos el simbolo “~” que representa la ruta del home del usuario actual, en nuetro caso el usuario es “postgres” y la ruta del home es “/var/lib/postgresql”

9.2. Ha través de modo “depuración”, podemos verificar algún error, para activar es necesario colocar el párámetro “-v”

postgres@maestro:/$ ssh -vvv postgres@IP_esclavo -i ~/.ssh/id_rsa

Nota: El modo “depuración” hace que ssh imprima mensajes sobre su progreso. Esto es útil para depurar problemas de conexión, autenticación y configuración. Múltiples opciones -v aumentan la verbosidad. El máximo es 3.

Relación de confianza entre “Esclavo y Maestro”
Servidor Esclavo

10. Iniciar sesion usuario postgres:

operador@esclavo:/# su postgres

11. Genera la llave “PÚBLICA” y “PRIVADA” del usuario “postgres”:

VER PASO “GENERAR LLAVES”

Nota: En éste caso el usuario “postgres” es del manejador de BD postgreSQL y su home (%h) es “/var/lib/postgresql”

12. Copiar llave pública del servidor esclavo al maestro:

operador@esclavo:/# scp /var/lib/postgresql/.ssh/id_rsa.pub usuario_valido@IP_maestro:/tmp

Servidor Maestro:

13. Copiar llave pública del servidor esclavo a archivo especial authorized_keys del servidor maestro:

operador@maestro:/# cat /tmp/id_rsa.pub >> /var/lib/postgresql/.ssh/authorized_keys

14. Comprobar permisos y dueño del archivo:

operador@maestro:/# chow postgres:postgres /var/lib/postgresql/.ssh/authorized_keys
operador@maestro:/# chmod 644 /var/lib/postgresql/.ssh/authorized_keys

15. Editar archivo configuración sshd:

operador@maestro:/# vim /etc/ssh/sshd_config

16. Agregar o descomentar la siguientes línea:

PubkeyAuthentication yes
AuthorizedKeysFile     %home/.ssh/authorized_keys .ssh/authorized_keys .ssh/authorized_keys2
UseDNS no

17. Reiniciar servicio:

operador@maestro:/# /etc/init.d/ssh restart

Nota: hasta este punto ya existe una relación de confianza entre los servidores “Maestro” – “Esclavo” y “Esclavo” – “Maestro”

18. Comprobar: Conexión vía ssh con el usuario postgres, entre el servidor maestro y el servisor esclavo

postgres@esclavo:/$ ssh postgres@IP_maestro

18.1. Para forzar la lectura de la llave creada se puede utilizar la siguiente opción:

postgres@esclavo:/$ ssh postgres@IP_maestro -i ~/.ssh/id_rsa

18.2 Ha través de modo “depuración”, podemos verificar algún error, para activar es necesario colocar el párámetro “-v”

postgres@esclavo:/$ ssh -vvv postgres@IP_maestro -i ~/.ssh/id_rsa

CONFIGURACION COMANDO SSH-COPY-ID

La forma más fácil de agregar la clave pública es con el uso del comando ssh-copy-id. En el presente ejemplo, la relación de confianza ha sido creada para el usuario “postgres” pertenciente al manejador de BD PostgreSQL, por ser un usuario de “sistema”, no posee contraseña de acceso a la consola de bash, es por ello que el comando ssh-copy-id no puede ser utilizado, pero si funciona para otros usuarios, ejemplo:

Copia la llave publica del usuario “operador”, desde el servidor “esclavo” al servidor “maestro”, para ello el usuario utilizado “operador”, es un usuario válido con acceso vía SSH en el servidor “maestro”:

1. Loguearse con el usuario “operador”

root@esclavo:# su operador

2. Genera la llave “PÚBLICA” y “PRIVADA” del usuario “operador”:

VER PASO “GENERAR LLAVES”

3. Copiar la llave pública al servidor “maestro”

operador@esclavo:~$ ssh-copy-id operador@IP_maestro
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/operador/.ssh/id_rsa.pub"
The authenticity of host 'IP_maestro (IP_maestro)' can't be established.
ECDSA key fingerprint is SHA256:OMWi9spRNGtpsWZqm1h6ibVQcsDiU3Gje0bOR2cJZEA.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

4. Colocar contraseña del usuario “operador”

operador@IP_maestro password:
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'operador@IP_maestro'"
and check to make sure that only the key(s) you wanted were added.

5. En éste punto ya ha sido copiado la llave pública:

operador@esclavo:~$ ssh operador@IP_maestro
postgres@esclavo:/$ ssh -vvv postgres@IP_maestro -i ~/.ssh/id_rsa

Enlaces:
generando tu clave publica ssh

Anuncios

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 )

w

Conectando a %s