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.