Conectar por SSH entre terminales sin usar passwords.

Hoy vamos a aprender cómo conectar vía SSH sin usar passwords. Pero primero antes de comenzar veremos varios conceptos importantes respecto al protocolo y las claves públicas para poder entender mejor cómo funciona todo.
¿Qué es el SSH?
SSH significa Secure SHell, es un protocolo diseñado para transmitir información de manera segura entre dos hosts a través de la línea de comandos de Unix. Para establecer la conexión se necesita un servidor SSH corriendo en el host destino, y un cliente SSH en el host origen. Las formas de conectar soportadas son a través de passwords o bien con llaves públicas, que es el método que vamos a ver hoy.
¿Para qué sirven las llaves públicas?
Las llaves SSH o en inglés “SSH keys”, permiten conectar dos hosts sin necesidad de usar passwords, para esto hace uso de dos pares de llaves, una pública y dos privadas.
Requerimientos Previos
El cliente OpenSSH debe estar instalado en el origen, y OpenSSH Server debe estar instalado en el destino. En las distribuciones Linux más populares ambos vienen preinstalados, pero por si acaso esta es una forma rápida de hacerlo:
CentOS/RHEL:

yum install openssh
yum install openssh-server

Ubuntu/Debian:

sudo apt-get install openssh-client
sudo apt-get install openssh-server

Antes de comenzar el tutorial, asumiremos que el host origen usa la IP 192.168.1.102 y el server destino usa la IP 192.168.1.103.

Generando las claves públicas

Para conectar sin password usaremos llaves públicas, debes generarlas en tu host origen primero usando el comando ssh-keygen:

ssh-keygen
Seguramente te pedirá que ingreses una frase segura (passphrase)  para tu llave privada, en ese momento no escribas nada y dejalo en blanco por ahora, simplemente presiona ENTER. Una vez finalices deberías ver algo como esto:

[user1@host ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa): 
Created directory '/home/user1/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.

Como ves el resultado son dos archivos principales:

/home/user1/.ssh/id_rsa
que contiene la llave privada de tu máquina origen.

/home/user1/.ssh/id_rsa.pub
que contiene la llave pública.

Copiar la llave hacia el servidor SSH destino

Abre una terminal como root en el server destino y crea los directorios requeridos:

mkdir -p /home/user/.ssh
chmod 700 /home/user/.ssh
Luego usa scp para transferir tu llave pública hacia el directorio que creaste previamente:

scp -P 22 /home/user1/.ssh/id_rsa.pub user@192.168.1.103:/home/user/.ssh/authorized_keys
A tener en cuenta: 22 es el puerto por defecto de SSH, sin embargo muchos servidores lo cambian para mejorar la seguridad del sistema, en ese caso tendrás que reemplazar 22 por el puerto donde esté escuchando tu SSH.

Está todo listo para que puedas conectar sin password.

Prueba de conexión sin password vía SSH

Simplemente ingresar a tu host origen y tipea:

ssh user@192.168.1.103
Recuerda reemplazar el usuario ‘user’ y la IP ‘192.168.1.103’ con los datos reales que usarás para conectar.
En este punto ya deberías tener tu acceso ssh sin password:

[user1@host ~]$ ssh user@192.168.1.103
Last login: Wed Jun  924 15:29:59 2015 from 194.XX.XX.XX
[user1@host~]$
A partir de este momento ya deberías poder transferir archivos vía SSH también. Este es un ejemplo usando SCP:
[user1@host ~]$ scp -P 22 /tmp/archivo.txt user@192.168.1.103:/home/user/

Conclusiones

Como pudimos ver, conectar por ssh sin password es bastante fácil de implementar, sólo debes generar las llaves en el origen, copiarlas al destino y listo. Siempre asegúrate de que tienes las conexiones permitidas entre ambos hosts en caso de que uses un firewall, de lo contrario no podrás conectar.

Nota importante:
Si no conseguimos logearnos con este procedimiento hay que visualizar el log de autentificación para saber cual es el problema:

 cat /var/log/secure

Vemos cual es el error en este caso 
"Authentication refused: bad ownership or modes for directory /home/usuario"

Lo solucionamos dando permiso de escritura al grupo:
 chmod g-w /home/usuario
y verificamos que el resto de permisos estén bien para la carpeta .ssh:
chmod 700 /home/usuario/.ssh
chmod 600 /home/usuario/.ssh/authorized_keys



Comentarios

Entradas populares de este blog

Orange Pi IoT 2G Flashear memoria NAND

Usar datos gratis para proyectos IoT FreedomPop y Orange Pi 2G IoT (también Simyo).

Configurar modem GSM en la Orange Pi 2G IoT (Orange España)