Inicio > Seguridad, SSH > Conexiones SSH sin contraseña

Conexiones SSH sin contraseña

Lunes, 9 de febrero de 2009 Dejar un comentario Ir a comentarios

Aquellos que tengamos la necesidad de conectarnos de forma remota a nuestros servidores para su administración a través del protocolo SSH, sabemos la tortura que puede suponer introducir continuamente la contraseña para poder autenticarnos.

Voy a comentar una forma que nos facilite esta labor.

Para los que les suene a chino esto del SSH, hago referencia a la Wikipedia que todo lo sabe:
.

SSH (Secure SHell)-intérprete de comandos seguro- es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos, y también puede redirigir el tráfico de X para poder ejecutar programas gráficos si tenemos un Servidor X (en sistemas Unix) corriendo.

Lo que muchos de nosotros tenemos corriendo en nuestros servidor es el paquete OpenSSH:

OpenSSH (Open Secure Shell) es un conjunto de aplicaciones que permiten realizar comunicaciones cifradas a través de una red, usando el protocolo SSH. Fue creado como una alternativa libre y abierta al programa Secure Shell, que es software propietario. El proyecto está liderado por Theo de Raadt, de Calgary.

Dicho esto, comentar que el disponer de OpenSSH instalado en nuestros servidores supone importantes ventajas. La primera es que utilizamos un protocolo seguro cuando nos conectamos (no como su hermano menor telnet en el que las contraseñas viajan sin cifrar, y aplicando lo ya sabido…).

Nos aprovecharnos de OpenSSH tanto para labores de administración, así como para intercambio de archivos de una forma segura. Para cumplir este ultimo objetivo nos apoyamos en el comando scp, o para los amantes del GUI, aprovecharnos de herramientas como Filezilla (soporta sftp).

Vamos a explicar los pasos que debemos realizar.

Podemos resumir este proceso en 3 pasos:

  1. Generar la pareja de llaves publica/privada
  2. Copiar la llave publica en todos aquellos servidores que debemos administrar
  3. Levantar ssh-agent para cachear las credenciales de session

Generamos la pareja de llaves publica/privada:

ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/pedimave/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/pedimave/.ssh/id_rsa.
Your public key has been saved in /home/pedimave/.ssh/id_rsa.pub.
The key fingerprint is:
33:ee:70:48:19:03:a7:41:eb:e8:46:f9:63:11:79:5b pedimave@pedigree-laptop

Si comprobamos los archivos que nos ha generado en el directorio que nos proponía por defecto, veremos los siguientes ficheros:

ls -ali
total 44
2670810 -rw——-   1 pedimave pedimave  1743 2009-02-08 17:48 id_rsa
2671082 -rw-r–r–   1 pedimave pedimave   406 2009-02-08 17:48 id_rsa.pub
…..

El fichero id_rsa contiene la llave privada. Es importante comprobar que únicamente nuestro usuario tenga permisos para leer el fichero:


2670810 -rw——-   1 pedimave pedimave.

Si no fueses así, prodriamos forzarlo con el siguiente comando:
chown n_usuario id_rsa
chmod 600 id_rsa

El fichero id_pub, seria el que contiene la llave publica.

Una vez hemos generado esta pareja de llaves, deberemos subir la llave publica a todas aquellas maquinas las cuales queremos administrar de forma remota.

Si queremos conectarnos, como root por ejemplo, deberemos generar un archivo /root/.ssh/auhorized_keys en el que introduciremos la información de la llave publica que acabamos de generar.

Podemos realizar este proceso de mil formas, pero lo mas cómodo podría ser utilizando el script ssh copy-id.

ssh$ ssh-copy-id -i id_rsa.pub root@10.106.215.197
root@10.106.215.197’s password:
Now try logging into the machine, with “ssh ‘root@10.106.215.197′”, and check in:
.ssh/authorized_keys
to make sure we haven’t added extra keys that you weren’t expecting.

Podemos realizar los mismo utilizando el siguiente script

$ cat ~/.ssh/id_dsa.pub | ssh servidor ‘cat – >> ~/.ssh/authorized_keys’

Para gustos están los colores.Nos conectamos a la maquina y vemos que verdaderamente se ha cumplido lo que hemos comentado

pw
/root/.ssh
ls -ali
total 24
2638663 drwx—— 2 root root 4096 2009-02-08 18:03 .
2638625 drwxr-xr-x 66 root root 4096 2009-02-08 18:03 ..
2638606 -rw——- 1 root root 406 2009-02-08 18:03 authorized_keys
2637933 -rw-r–r– 1 root root 4468 2009-02-03 16:08 known_hosts

root@pedimave-laptop:~/.ssh# cat authorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqAB/SdiqnKg/HAhsvNIQovMdZxCGF2SF7/X94z1qu6Yao9G+3b/mwSEC0ErCNLeQTV6w0GEHnrOEsOqpNJZvfxodskTkq/2zRwjSXDyrU5ZE8VOMRMkfxkemeIBSeJ4FYhjYm+hhMopWtblk8mM1aSwXDg/S+EbYqTlQSIFYDkkYPw== pedimave@pedimave-Lap

Si volvemos a intentar conectarnos al Server, veremos que nos sigue pidiendo la contraseña.¿Que Pasa?

Lo único que nos quedaría por hacer es utilizar levantar el ssh-agent, que nos va a permitir almacenar las claves mientras dure la session siendo ademas esté el encargado de realizar la autenticacion.

En mi maquina cuando levanto la session a través del entorno gráfico también levanto el ssh-agent

ps -ef | grep ssh-agent

pedimave 5786 5737 0 12:41 ? 00:00:00 /usr/bin/ssh-agent /usr/bin/ssh-agent /usr/bin/startkde
pedimave 5787 5737 0 12:41 ? 00:00:00 /usr/bin/ssh-agent /usr/bin/startkde

Si no fuese así, y estamos utilizando por ejemplo gnome y gdm como  gestor de inicio, podríamos añadir en el fichero .xsession  lo siguiente :ssh-agent gnome-session

En caso de ser amantes de la consola podríamos utilizar el siguiente Script de John Buttery.

if [ ${SSH_AGENT_PID+1} == 1 ]; then
ssh-add -D
ssh-agent -k > /dev/null 2>&1
unset SSH_AGENT_PID
unset SSH_AUTH_SOCK
fi

Ahora ya solo nos queda añadir la nueva identidad creada.

$ssh-add id_rsa

Enter passphrase for id_rsa: (Introducimos la password anteriormente definida)
Identity added: id_rsa (id_rsa)

Comprobamos ahora que nuestra identidad se ha cargado correctamente a través del siguiente comando

ssh-add -L

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqAB/SdiqnKg/HAhsvNIQovMdZxCGF2SF7/X94z1qu6Yao9G+3b/mwSEC0ErCNLeQTV6w0GEHnrOEsOqpNJZvfxodskTkq/2zRwjSXDyrU5ZE8VOMkV11yvDBY1IDORMkfxkemeIBSeJ4FYhjYm+hhMopWtblk8mM1aSwXDg/S+EbYqTaGigGAxGYRkIUJkgCL7l89cIyHjnyIBAke5XKHMQsUeBrHb845VHmt1TUUY9JMlKXxRiGYU8jPmqxwjxAMXMsBVqgRsWOKEJRK7aW7tdrV1u4hcx5vTO1hI+O1VHlzLHesxeqmyQr/MHcmSakJP1KvBBKqPlQSIFYDkkYPw== id_rsa

Ahora solo nos queda comprobar que todo funciona como esperamos:

ssh root@10.106.215.197 … y vemos que ya no es necesaria la contraseña para autenticarnos.

Mas o menos fácil ¿verdad?.

Mucha gente utilizará sistemas Windows , y un software llamada Putty como cliente SSH. Para que se puedan aprovechar de las mismas ventajas les vamos a ayudar. ¿Algo complicado?. No. Lo único que tenemos que hacer es convertir la clave que hemos generado a un formato que el Putty entienda.

Teniendo el putty instalado ejecutamos:

puttygen id_rsa -o id_rsa.ppk

Enter passphrase to load key: (Introducimos la password generada)
ls -ali id_rsa.ppk
2670784 -rwx—— 1 pedimave pedimave 1460 2009-02-08 18:51 id_rsa.ppk

Ya solo nos quedaría enviarles el archivito de marras, para que lo carguen en el Pageant (ssh-agent) (A ver como lo hacemos, ja,ja), y a funcionar.

Podemos incluso darle una pequeña vuelta de tuerca. ¿Como?. Aprovechándonos de otras dos aplicaciones.

La primera va a ser un gestor de conexiones remotas como puede ser grcm o el mismo Putty (tenemos versiones para Linux), que como podemos ver esta en los repositorios de Ubuntu

apt-cache search grcm
grcm – GNOME application to initiate connections to remote machines

 

grcm – GNOME application to initiate connections to remote machines

Putty

No voy a comentar su instalacion ni su funcionamiento por su sencillez.

La otra herramienta será TrueCrypt. Aprovechando esta ultima, cifraremos la clave privada de nuestro equipo, y la configuración de los gestores remotos para evitar a los curiosos.

Un saludo compañeros.

Descargar Putty/Pageant

OpenSSH

Enviar a un amigo: Share this page via Email
  1. Sin comentarios aún.
  1. Sin trackbacks aún.
*