SSH sin contraseña

Diariamente utilizo ssh a la hora de conectarme de forma remota a un par de máquinas. No es exageración decir que se me ha hecho imprescindible la utilización de las herramientas del paquete OpenSSH. Solo hay un pequeño inconveniente… que a veces es un coñazo tener que estar poniendo la contraseña en cada vez que quieres entrar a una determinada máquina con tu cuenta de usuario.

Aquí va una explicación de cómo autenticarnos automáticamente en un servidor SSH mediante claves DSA/RSA (generando un par de claves privadas y públicas). Antes de nada… decir que todo esto son cuatro pasos; que aunque yo me voy a parar en detallar las salidas de cada uno de esos pasos, no hay que alarmarse… este post puede salir algo largo pero vamos… es todo “pellejo”.

En fin… vamos allá. Pongamos el caso de que tenemos dos máquinas llamadas servidor y cliente. Nosotros utilizamos a ‘cliente’ y queremos tener un precioso icono en el escritorio tal que al pinchar en él entremos automáticamente a ’servidor’, a través de una conexión SSH. En ’servidor’ tenemos creada una cuenta de usuario: ebarbeito se llama.

Como paso previo, deberemos de comprobar en la máquina ’servidor’ que el demonio sshd está preparado para lo que queremos hacer. Para ello, entramos en el ’servidor’ como usuario root y editamos el archivo de configuración del sshd (/etc/ssh/sshd_config) y miramos que estén las líneas:

# vi /etc/ssh/sshd_config

    RSAAuthentication yes
    PubkeyAuthentication yes

Vamos… casi seguro que por defecto tienes ya preasignados esos valores. Pero por si acaso. Bien, ahora nos valemos de la utilidad ssh-keygen; un generador de claves con el que crearemos el par de claves públicas y privadas DSA y RSA. En la máquina ‘cliente’ tecleamos:

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ebarbeito/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ebarbeito/.ssh/id_rsa.
Your public key has been saved in /home/ebarbeito/.ssh/id_rsa.pub.
The key fingerprint is:
76:16:5f:97:84:2b:c4:ab:b4:9b:62:7a:99:89:1a:79
ebarbeito@cliente

Y, acto seguido:

$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/ebarbeito/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ebarbeito/.ssh/id_dsa.
Your public key has been saved in /home/ebarbeito/.ssh/id_dsa.pub.
The key fingerprint is:
44:f6:df:a6:c4:09:bc:34:20:51:97:96:24:0b:ef:19 ebarbeito@cliente

Como veis, debemos hacer el proceso dos veces (una por cada algoritmo de cifrado). Si os fijáis en las salidas que da el programa, se puede ver una línea: Enter passphrase (empty for no passphrase): Bien, pues ahí tendremos que indicarle una contraseña (se trata de la clave privada), la que queramos. No tiene que ser la misma contraseña que usemos para nuestra cuenta de usuario ni nada, podemos poner la que queramos y luego volverla a poner para confirmarla. Una vez hecho esto las claves se crean en nuestro directorio ~/.ssh , podemos hacer un ls para comprobarlo:

$ ls -hla .ssh/
total 28K
drwx------    2 ebarbeito users          84 2003-01-15 08:18 ./
drwx--x--x   56 ebarbeito users        4.0K 2003-01-15 08:21 ../
-rw-------    1 ebarbeito users         736 2003-01-15 08:18 id_dsa
-rw-r--r--    1 ebarbeito users         603 2003-01-15 08:18 id_dsa.pub
-rw-------    1 ebarbeito users         951 2003-01-15 08:17 id_rsa
-rw-r--r--    1 ebarbeito users         223 2003-01-15 08:17 id_rsa.pub
-rw-r--r--    1 ebarbeito users        1.3K 2003-01-12 03:26 known_hosts

Pues ahí las tenéis. El par de claves privadas (e intrasferibles😉 y las públicas. Bien, ya tenemos lo necesario en la máquina ‘cliente’. Ahora debemos preparar a la máquina servidor, a la cual nos conectaremos. Debemos copiar el par de claves públicas generadas (id_dsa.pub y id_rsa.pub) a nuestro directorio ~/.ssh del ’servidor’. Para hacer esto, se pueden utilizar varios métodos. El más “cutre” es copiar el contenido de los archivos, conectarte al servidor y crear tu mismo los archivos ~/.ssh/id_dsa.pub y ~/.ssh/id_rsa.pub pegando el contenido de uno y otro. Si os fijáis:

$ cat ~/.ssh/id_dsa.pub
ssh-dssAAAAB3NzaC1kc3MAAACBALyCDCKsON
cH+BdersG+qA78/t1aNEmuqoumU5SEGssnrvd1m1aSRloJ8e5dlYS9sIhrSKWgU90cSF
3vlwofKwjm92reGx6CT/GTGdh8kOrBAj/Ksrg0tPDsBML1Mvq0zneebQCLbn3gPeUvcnp
p5NkACiJkSPb5HxYr+L2aAguBAAAAFQDKtni/DxV6VLjfmdpbJSkJL0dc+wAAAIBBBlmT
yRWbgWZh4L+HS48Y0BWW6oWvpq1/HouQ/QM0tLqDSFkVmsByVhgAZzrCYNMTetah
8g9WTnDcidzGhhW1iPc6Olz2k9WOqH2pOoJ0BT1QzD9FB83vMcQkPAOJEeumaXwym5
M/WT7Ypo6ADGPvE4dZmCqDAy9G28ZcgeqkBgAAAIB/5ZeVSiMUdCmbgl+V28gYJpN
E0gLRayN16tOhPAQW671LAPxDIF6x/qFB2oQFi9W6DQBsRdlqJCq7DCNzTLhVe53bsq0
wdD6ffFNFRT770mB4wob36oxLCXc6DE38UrbeL9kDeTsulmFz5SZnA0Cj6GWUrseojg4
Yv0HzH2rSvQ==    ebarbeito@cliente

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA0Sk624r+a7gxn+FG+tTVjMXmItd/bh
QOtMzkiYqsnY2QlxiUOg9uAwWNEHvx4IIWgCkkasQSelFkZB78GJvkJI7E6GworWSE
gsy/5W3MZQldr6PrAJaOl8O+zhYE0TFHRE1oVat3sj9MC1uASnNvcLyjga8LDprc
241glAj/s7c= ebarbeito@cliente

Aunque es auténtico chino mandarín encriptado lo que hay en esos archivitos, se puede copiar y pegar directamente. Pero vamos… yo prefiero hacerlo de un modo un tanto más sofisticado. Con la ayuda del comando scp😉 con el que podremos copiar los archivos directamente al servidor. De esta forma:

$ scp ~/.ssh/id_rsa.pub ebarbeito@servidor:.ssh/id_rsa.pub
The authenticity of host 'servidor (192.168.0.2)' can't be established.
RSA key fingerprint is ed:6f:c3:71:fd:e3:a3:29:03:b6:91:dd:87:10:18:70.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'servidor' (RSA) to the list of known hosts.

 [   welcome to ebarbeito's ssh server
     ------------------------------------
                     enrique@barbeito.org   ]

ebarbeito@servidor's password:
id_rsa.pub   100% |*************************|  223    00:00

$ scp ~/.ssh/id_dsa.pub ebarbeito@servidor:.ssh/id_dsa.pub

 [   welcome to ebarbeito's ssh server
     ------------------------------------
                     enrique@barbeito.org   ]

ebarbeito@servidor's password:
id_dsa.pub   100% |*************************|  603    00:00

Es sencillo y más rápido que andar copiando/pegando “chino mandarín” de un lado a otro ¿o no? jeje🙂 Además, la sintaxis es simple: scp <archivo local> usuario@servidor:<ruta destino>

Si el comando sqp te da el siguiente error:

scp: .ssh/id_rsa.pub: No such file or directory

Seguramente sea porque en el directorio de usuario del servidor no tengas creado el subdirectorio .ssh. Solo has de acceder a él, crearlo con mkdir ~/.ssh y cambiarle los permisos a rwx para el usuario (hay que evitar que nadie que no seas tú mismo pueda tener acceso a las claves 😉 de este modo: chmod 700 ~/.ssh. Una vez hecho esto, vuelve a ejecutar scp.

Bien, y ahora vamos a lo esencial. Vamos a permitir que no tengamos que introducir nuestra contraseña a la hora de autenticarnos. Ni nuestra contraseña, ni tampoco la que pusimos a la hora de generar el par de claves. Para ello nos valemos de la utilidad ssh-add, que la ejecutamos en el ‘cliente’ claro:

$ ssh-add
Enter passphrase for /home/ebarbeito/.ssh/id_rsa:
Identity added: /home/ebarbeito/.ssh/id_rsa (/home/ebarbeito/.ssh/id_rsa)
Identity added: /home/ebarbeito/.ssh/id_dsa (/home/ebarbeito/.ssh/id_dsa)

/*
[ Posible problema ]

Si al hacer el anterior paso (ejecutar ssh-add) nos da el siguiente error:

$ ssh-add
Could not open a connection to your authentication agent.

Para subsanarlo tendremos que poner:

$ eval `ssh-agent`

Y después

$ echo $SSH_AUTH_SOCK

Una vez hecho esto, volvemos a ejecutar ssh-add que ya funcionará bien🙂 (este problema lo tuve hace un tiempo y buscando información en Google logré esta solución)
*/

Bien… pues ya está todo casi. Nos queda conectarnos nuevamente al servidor (esta es ya la última vez que necesitaremos teclear la contraseña🙂 con nuestro usuario ‘ebarbeito’ y volcar el contenido de las claves públicas copiadas anteriormente al directorio ~/.ssh/ al archivo ~/.ssh/authorized_keys2 :

$ cd .ssh/
$ cat id_dsa.pub >> authorized_keys2
$ cat id_rsa.pub >> authorized_keys2

Podemos hasta borrar los archivos de las claves si queremos:

$ rm id_dsa.pub id_rsa.pub

Bien… pues ya está!😀 ahora salimos de la cuenta y volvemos a entrar:

ebarbeito@cliente:~$ ssh -l ebarbeito 192.168.0.2

Linux servidor 2.4.20 #1 SMP Fri Jan 3 17:38:55 CET 2003

Last login: Wed Apr 16 01:29:18 2003 from cliente
ebarbeito@servidor:~$

Como veis… no pide contraseña ni nada y nos entra del tirón jeje🙂 Ya podemos crearnos nuestro enlace en el escritorio: agregar un lanzador de alguna terminal virtual que usemos (yo utilizo aterm para estos casos) con el parámetro necesario para ejecutar un comando, que sería un ssh -l usuario servidor

Y ya esta… de este modo tendremos acceso instantáneo desde la máquina cliente al ’servidor’. Yo la verdad que me he enrollado un montón… es muy simple; más de lo que lo hago. He preferido pecar de pesado y hacer denso el truquito este para que vierais que salidas iba dando y tal.

Ala, a disfrutarlo con salud!😉

[ NOTA ] : Tenía escrito todo esto en un archivo que guardaba para ponerlo aquí algún día de estos (creo que lo escribí a mediados de febrero de este año). Todo lo expuesto aquí lo he sacado mediante la experiencia y gracias a un thread en la lista de correo en español de usuarios de Debian. ¿Qué quiero decir con esto? Pues que me reservaba la publicación de este truquillo para cuando investigara un poco más y pudiera detallarlo todo de un modo mejor; pero como me veo que no va a poder ser y que ya es alargarlo demasiado pues… lo publico tal y como lo escribí hace ya meses: quizás le venga bien a alguno, quien sabe.

De todos modos, este tema está muy documentdado; tenéis otros textos de lo mismo:
»» [ aquí ] y [ aquí ]

Fuente | Ebarbeito

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 )

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 )

Google+ photo

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

Conectando a %s

A %d blogueros les gusta esto: