Introducir una contraseña cada vez que necesitamos iniciar una conexión ssh con el servidor, puede ser algo incómodo1.
Afortunadamente, revisando sobre ello, encontré que es posible acceder mediante un método alternativo: llaves ssh2.
Para ello, supongamos que tenemos 2 pc's a las que llamaremos A y B, con los usuarios a y b respectivamente.
Lo que se desea es poder acceder desde la pc A hacia B con el usuario b. Para lo cual seguiremos los siguientes pasos:
-
En la pc 'A' generamos una llave pública y privada sin la frase de contraseña.
a@A:~> ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/a/.ssh/id_rsa): Created directory '/home/a/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/a/.ssh/id_rsa. Your public key has been saved in /home/a/.ssh/id_rsa.pub. The key fingerprint is: 1a:2b:3c:4d:5e:6f:77:8h:9i:jj:k0:1a:2b:3c:4d:5e a@A -
Creamos el directorio ~/.ssh en B, considerando que puede ya existir:
a@A:~> ssh b@B mkdir -p .ssh b@B's password: -
Añadimos nuestra llave pública creada en A al archivo ssh/authorized_keys en B:
a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys' b@B's password:
Nota
Es posible que necesitemos ajustar los permisos del directorio .ssh y el archivo .ssh/authorized_keys.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Una vez listo lo anterior,podríamos acceder por ssh al servidor B sin necesidad de escribir nuestra contraseña.
Actualización
Un método mucho más simple para copiar nuestra clave ssh al servidor al que accederemos es mediante el comando ssh-copy-id:
ssh-copy-id -i .ssh/id_rsa.pub user@host
Lo cual resulta mucho más veloz que el método anterior.
Configuración recomendada hoy
El método de ssh-copy-id sigue siendo el más rápido. Para una configuración nueva, usa una llave ed25519 en lugar de RSA:
-
Genera la llave:
ssh-keygen -t ed25519 -C "tu-correo@ejemplo.com" -
Copia la llave pública al servidor:
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor -
Prueba el acceso:
ssh usuario@servidor
Un alias en ~/.ssh/config
Si entras siempre al mismo servidor, guarda un alias:
Host servidor
HostName 203.0.113.10
User deploy
IdentityFile ~/.ssh/id_ed25519
Después basta con ssh servidor.
Permisos correctos
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
El archivo authorized_keys debe ser del usuario que inicia sesión y no debe ser escribible por otros.
Problemas frecuentes
Sigue pidiendo contraseña
Ejecuta ssh -v usuario@servidor y revisa qué llave está ofreciendo el cliente. En el servidor, comprueba que PubkeyAuthentication yes esté activo en /etc/ssh/sshd_config y que la llave esté en ~/.ssh/authorized_keys con los permisos correctos.
¿Puedo desactivar el acceso con contraseña?
Sí, cuando confirmes que la llave funciona. Antes de cerrar la sesión, abre otra terminal y comprueba que sigues entrando con la llave:
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl reload ssh
El servicio puede llamarse ssh o sshd según la distribución. Si algo falla, vuelve a la sesión anterior y restaura el valor.
Referencias
-
SSH login without password: linuxproblem.org
-
ssh - authorized_keys HOWTO: universidad de cambridge
-
Acceso a máquinas usando ssh sin contraseña: universidad de valencia
Comentarios !
comments powered by Disqus