Acceder a tu Linux sin contraseña por ssh, si no usando llave pública

Published:

Hoy vamos a ver como podemos ingresar a nuestro servidor vía ssh sin la necesidad de utilizar contraseña, si no que vamos a usar una llave pública.

Hay 2 formas que podemos utilizar para conectarnos:

  • La más común es usar usuario y contraseña.
  • O utilizar un acceso con clave pública, sin contraseña.

Tiene varias ventajas utilizar una clave pública, la más común es no tener que colocar contraseña. Si utilizamos herramientas de gestión como Ansible, que veremos en detalle más adelante, se hace todo más simple. Podemos tener mayor seguridad. Y otros beneficios.

1- Verificar que no tengamos generada una llave.

ls -al ~/.ssh/id_*.pub

Si existe no la creamos usamos la que tenemos, pero si no existe lo vamos a crear y por lo tanto el comando anterior nos dará un mensaje como:

ls: cannot access /root/.ssh/id_*.pub: No such file or directory [INGLES]
ls: no se puede acceder a /root/.ssh/id_*.pub: No existe el fichero o el directorio [ESPAÑOL]

2- Generando la llave pública.

Vamos a lanzar el comando ssh-keygen en el equipo. El comando simple sería

ssh-keygen -t rsa

Explicación de las opciones
-t rsa: es el tipo, en este caso el protocolo RSA. Por defecto la clave que se va a generar tiene 2048 bits, aunque podemos darle mayor seguridad especificando con un -b 4096

ssh-keygen -t rsa -b 4096

Nos hará 3 preguntas

  • Ingresa el archivo en el que guardarás la clave (/home/.ssh.id_rsa)
  • Ingresa la passphrase (vacía si quieres dejarlo sin passphrase)
  • Repetir la passphrase que generamos.

En este caso le podemos dar enter a las 3 para dejar los valores por defecto. Tene en cuenta que la passphrase es una cadena de caraceteres para la clave privada y no es obligatoria.
Los archivos generados se guardan por defecto en:

  • Clave Privada: .ssh/id_rsa
  • Clave Pública: .ssh/id_rsa.pub

3- Llevando la clave a otro equipo para no tener que usar contraseña.

Finalmente vamos a ver varias opciones para hacer la configuración final.

3.1: usar el comando ssh-copy-id

ssh-copy-id remote_username@remote_IP_Address

3.2: Copia la clave privada usando SSH

cat ~/.ssh/id_rsa.pub | ssh remote_username@remote_ip_address "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

3.3: Copiar manualmente la clave pública

Usamos el comando cat para visualizar con contenido de la llave:

cat ~/.ssh/id_rsa.pub

La clave comienza con ssh-rsa. La copiamos y a continuación, en el servidor remoto, iniciamos sesión y creamos el archivo .ssh si no existe.

mkdir -p ~/.ssh

De manera similar, puedes crear el archivo authorized_keys. Agrega la clave pública SSH copiada al archivo vacío como se muestra a continuación:

echo SSH_public_key >> ~/.ssh/authorized_keys

SSH_public_key sería la clave pública que copiaste de la máquina de origen. Comienza con ssh-rsa.

Una vez que copies la clave, hay que ajustar los permisos en el directorio .ssh de servidores remotos mediante el comando chmod.

chmod -766 ~/.ssh

4- Probamos
Como dice el ejemplo apenas terminamos de configurarlo hacemos

ssh root@IP_o_Host_remoto

Y no debería solicitar la contraseña y ya estamos en el servidor remoto.

- Advertisement -
Jorge
Jorgehttps://nksistemas.com
Soy Jorge, Sr Sysadmin Linux/DevOps/SRE y creador de NKSistemas.com Trabajo con plataformas: Linux, Windows, AWS, GCP, VMware, Helm, kubernetes, Docker, etc.

Related articles