Facebook Twitter Google Digg Reddit Email Imprimir
Lunes 23 de abril de 2018
Santoral:
Jorge
Otros:
Semana:
17
Día año:
113/365 (31%)
U.F.:
26992.05
IPC:
0,2
Dolar:
596,26
Euro:
732,78
Bitcoin:
U$ 8401.0179517185
mindicador.cl
Time4VPS.EU - VPS hosting in Europe

SSH: Autentificación por llaves

Alternativa para facilitar acceso a servidores

Introducción

Estamos acostumbrados a la utilización de usuario y clave para el acceso a los servidores, pero ssh nos ofrece una alternativa diferente: llaves, que consiste en un certificado digital. Ésto nos permite ingresar sin "teclear" una clave.

Como funciona

Al crear las llaves de autentificación se generan 2 certificados: Una llave Pública, que entregamos al servidor (o servidores) para que sea autorizada, y una Privada, que como su nombre lo indica, no debemos compartirla. A su vez, dicha clave privada puede ser definida con o sin clave, con lo que podemos controlar el nivel de seguridad deseado.

Al utilizar llaves sin clave, se facilita enormemente la ejecución de tareas automáticas dado que se evita el uso de trucos o instalar software adicional, que a su vez pueden dejar las claves al descubierto.

Por parte del servidor, se permite controlar el origen del acceso, autorizando solo ciertos equipos, redes o dominio (obtenido por dns reverso). Además se permite forzar de ejecución de un único comando para la tranquilidad del administrador del servidor.

Empecemos

Consideraremos que tenemos 2 equipos Linux, Unix, FreeBSD o algún otro que soporte SSH, los que llamaremos local y remoto (mmm, con un poco más de creatividad podría haberlos llamado Houston y Apollo)

Creación de las llaves

En nuestro equipo local se generan las llaves pública y privada con la ejecución del comando:

ssh-keygen -t rsa -C "llave de antonio@local.wyzer.cl"

Generating public/private rsa key pair.

Nos solicitará confirmar la ubicación del archivo para la llave, por defecto se almancena en $HOME/.ssh/id_rsa, pero se puede ingresar un nombre distinto o definirlo por medio de la opción -f, para aceptar el archivo debe ingresar <ENTER>.

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

Luego nos solicita una clave para el uso de la llave, la cual puede ser omitida pulsando <ENTER>, se pide nuevamente como confirmación:

Enter passphrase (empty for no passphrase):
Enter same passphrase again: 
Your identification has been saved in /home/antonio/.ssh/id_rsa.
Your public key has been saved in /home/antonio/.ssh/id_rsa.pub.
The key fingerprint is:
fb:51:7b:56:46:b9:da:61:2c:15:38:26:a3:64:9d:5b antonio@local.wyzer.cl
The key's randomart image is:
+--[ RSA 2048]----+
|          . . .. |
|         o = E  o|
|        o . * .o.|
|         . .  o..|
|        S   .. =o|
|         . . .=o.|
|        . . ..o. |
|         . . o   |
|          .      |
+-----------------+

Ahora ya contamos con 2 archivos, nuestra llave privada, que debe ser protegida y evitar que sea extraida del equipo, en el archivo $HOME/.ssh/id_rsa, y la pública en el archivo $HOME/.ssh/id_rsa.pub que será la que compartiremos hacia los equipos remotos (receptores)

Agregar llave pública en equipo remoto

Debemos llevar el archivo $HOME/.ssh/id_rsa.pub hacia el equipo remoto, si no tiene acceso al equipo, deberá solicitar al administrador que agrege la llave, o bien, si tenemos acceso (o somos administradores) copiamos el archivo al equipo remoto con scp, suponiendo que existe el mismo usuario en el equipo remoto, del cual nos solicita la clave de acceso:

cd $HOME/.ssh
scp id_rsa.pub remoto:.ssh/
Password: 
id_rsa.pub                                    100%  407     0.4KB/s   00:00    

Ahora debemos trabajar sobre el equipo remoto, desde el directorio .ssh, debemos agregar el contenido del archivo id_rsa.pub en el archivo authorized_keys:

cat id_rsa.pub >> authorized_keys

El archivo id_rsa.pub ya no es requerido, por lo que podemos borrarlo en el equipo remoto, en el equipo local podemos conservarlo para repetir el proceso en otro equipo, utilizando la misma llave.

rm id_rsa.pub

Debemos asegurarnos que el directorio .ssh y el archivo authorized_keys cuenten solo con permisos para el dueño del archivo:

chmod 600 authorized_keys
chmod 700 .
ls -la
total 20
drwx------   2 antonio  users        512 Jul 27 12:24 ./
drwxr-xr-x  34 antonio  users       2048 Jul 26 15:59 ../
-rw-------   1 antonio  users        806 Jul 27 14:55 authorized_keys
-rw-r--r--   1 antonio  users       4289 Jan 22  2016 known_hosts

Ahora ya estamos listos para conectar al equipo remoto sin teclear una clave, simplemente como:

ssh remoto

Algunos consejos de seguridad

Por la parte del servidor, se nos permiten algunas restricciones anteponiendo una parametrización en el registro del archivo authorized_keys

Restringir el host de origen

Podemos indicar un IP, una red o un dominio (determinado por la resolución del reverso del IP):

from="192.168.1.*,192.168.10.34" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsoVd8y7nj...

Forzar la ejecución de un único comando

Se debemos brindar el acceso solo para la ejecución de un comando, podemos realizarlo con el parámetro command:

command="uptime" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsoVd8y7nj...

Al terminar el comando, se finaliza la sesión ssh. Si el usuario entrega algún comando en la ejecución de ssh en ésta configuración, el equipo remoto define la variable de ambiente $SSH_ORIGINAL_COMMAND con dicho comando.

Escrito por: Luis Hernán de la Barra, 22/07/2016

Generado por Sistema y almacenado en cache

Wyzer
Luis Hernán de la Barra
E-Mail:ldelabar@wyzer.cl
Web:www.wyzer.cl