X

Cómo conectar vía SSH sin password usando llaves públicas

En Infranetworking usamos SSH para conectar a todos nuestros servidores Linux, es una forma rápida y segura de controlar las terminales. Por años mucha gente ha venido usando SSH autenticando a través de usuarios y contraseñas, sin embargo no es el método más seguro, ni el más rápido para acceder de forma remota a un servidor.

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.

Artículos relacionados