Realizando conexiones ssh sin colocar la contraseña

Introducción:

Quizás a varios de nosotros se nos ha presentado el problema de cuando queremos hacer backups desde un servidor a otro. El envío mediante sftp (secure file transfer protocol) de los datos desde el servidor respaldado al de backups es algo complicado para nosotros si no nos manejamos tan bien shell scripting como para colocar la password como un parámetro, para usuarios básicos de Linux como yo realizar un largo script de bash que funcione correctamente nos llevaría bastante tiempo, de hecho, nos llevaría por lo menos un par de semanas para que haga lo necesario. Pero gracias a Dios o mejor dicho por Tatu Ylönen quien creó tanto el protocolo como el programa ssh y a los chicos de la Universidad de Berkeley por crear OpenSSH es que tenemos aplicaciones tan útiles.

Llaves:

OpenSSH tiene varios métodos de autentificación de usuarios, el conocido user y password, pero también existe una que es mediante un par de llaves publica/privada que asegura la identidad del usuario que se conecta al ordenador remoto. Este juego de llaves es especial porque están hechas de tal forma que lo que encripta una lo desencripta la otra.

Configurando el servidor para que acepte las llaves:

Lo Primero que debemos hacer luego de instalarnos el Servidor de SSH, es configurarlo para que acepte la autentificación por llaves, ésto se hace en el sshd_config que normalmente se encuentra en /etc/ssh/, lo abrimos con un editor de texto y le dejamos así:

1
2
3
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Luego de editar el archivo de configuración de sshd debemos reiniciar el servicio.

Utilizando Filezilla.

La primera opción es para habilitar el acceso mediante llaves tipo RSA, ésta no es necesaria que esté habilitada, puede estar comentada ya que sólo sirve con la versión 1 del protocolo.
La segunda es para activar el uso de llaves como método de Autentificación.
La tercera indica el archivo en el cual están las llaves autorizadas.

Creando llaves:

1
2
3
4
5
6
7
8
9
carlos@chernan:/etc$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/carlos/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): (dejar vacío)
Enter same passphrase again: (dejar vacío)
Your identification has been saved in /home/carlos/.ssh/id_dsa.
Your public key has been saved in /home/carlos/.ssh/id_dsa.pub.
The key fingerprint is:
7f:a2:0c:3e:6a:e9:e6:2d:db:de:12:d0:9f:9f:11:f0 carlos@chernan

Con ese comando hemos creado un par de llaves de tipo dsa la privada *_dsa y la publica *dsa.pub que se guardan en el directorio .ssh del usuario que ejecuto el comando (O sea ~/.ssh/).

Copiando las llaves:

1
2
3
carlos@chernan:/etc$ cd /home/carlos/.ssh/
carlos@chernan:~/.ssh$ ls
id_dsa id_dsa.pub known_hosts

En esta última parte, luego de haber creado el par de llaves nos dirigimos al directorio .ssh a revisar si se encuentran las llaves:

1
2
3
4
5
6
7
carlos@chernan:~/.ssh$ scp id_dsa.pub root@prueba81:llave_carlos.pub
The authenticity of host 'prueba81 (prueba81)' can't be established.
RSA key fingerprint is b8:a3:d1:e6:12:0c:e5:13:80:0c:e2:4e:c5:7d:20:19.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '
prueba81' (RSA) to the list of known hosts.
root@prueba81'
s password:
id_dsa.pub 100% 604 0.6KB/s 00:00

Realizamos una copia segura de la llave publica a el servidor donde nos queremos conectar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
carlos@chernan:~/.ssh$ ssh root@prueba81
root@prueba81's password:
prueba81:~# ls -la
total 40
drwxr-xr-x 4 root root 4096 2008-08-26 13:04 .
drwxr-xr-x 22 root root 4096 2008-08-18 07:11 ..
drwx------ 2 root root 4096 2008-08-19 16:11 .aptitude
-rw------- 1 root root 7876 2008-08-23 19:46 .bash_history
-rw-r--r-- 1 root root 412 2004-12-15 19:53 .bashrc
drwxr-xr-x 3 root root 4096 2008-08-19 15:56 downloads
-rw-r--r-- 1 root root 604 2008-08-26 13:04 llave_carlos.pub
-rw-r--r-- 1 root root 110 2004-11-10 13:10 .profile
-rw------- 1 root root 1024 2008-08-11 13:20 .rnd
prueba81:~# mkdir .ssh
prueba81:~# chmod 700 .ssh/
prueba81:~# cd .ssh/

Realizamos una conexión ssh al servidor para realizar los últimos ajustes. Primero que nada revisamos si existe el directorio .ssh en esta cuenta, sino está:

Lo creamos con mkdir .ssh.
Le damos todos los permisos al dueño.
Finalmente ingresamos a el directorio .ssh.

1
2
3
4
prueba81:~/.ssh# ls
prueba81:~/.ssh# cat ../llave_carlos.pub >> authorized_keys
prueba81:~/.ssh# exit
logout

Finalmente concatenamos el archivo llave_carlos.pub y la salida la dejamos en un archivo llamado authorized_keys que es el que configuramos al inicio.

Eso es todo, después podemos salir de la sesión y al entrar de nuevo si todo salio bien deberíamos entrar sin que nos pida contraseña.

Observaciones:

Solo es una conexión sin contraseña entre cuentas de usuarios no entre máquinas.
No es necesario renombrar la llave cuando haces el scp
Si tienes dudas con los comandos que acá han salido puedes conocerlos más leyendo sus respectivos man. (man )

2 comentarios en «Realizando conexiones ssh sin colocar la contraseña»

Deja un comentario

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