Alexander A. E. Full Stack Developer

Acceso SSH sin password

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:

  1. 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
    
  2. Creamos el directorio ~/.ssh en B, considerando que puede ya existir:

    a@A:~> ssh b@B mkdir -p .ssh
    b@B's password:
    
  3. 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:

  1. Genera la llave:

    ssh-keygen -t ed25519 -C "tu-correo@ejemplo.com"
    
  2. Copia la llave pública al servidor:

    ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor
    
  3. 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

  1. SSH login without password: linuxproblem.org

  2. ssh - authorized_keys HOWTO: universidad de cambridge

  3. Acceso a máquinas usando ssh sin contraseña: universidad de valencia


  1. en especial cuando la contraseña es una larga cadena de caracteres inmemorizables y son varios los servidores con los que se trabaja. ↩

  2. ssh keys ↩

Comentarios !

comments powered by Disqus