Configurar inicio de sesión SSH sin contraseña para varios servidores remotos mediante script


La autenticación basada en clave SSH (también conocida como autenticación de clave pública) permite la autenticación sin contraseña y es una solución más segura y mucho mejor que la autenticación de contraseña. Una de las principales ventajas del inicio de sesión sin contraseña SSH, y mucho menos de la seguridad, es que permite la automatización de varios tipos de procesos entre servidores.

En este artículo, demostraremos cómo crear un par de claves SSH y copiar la clave pública en varios hosts Linux remotos a la vez, con un script de shell.

Cree una nueva clave SSH en Linux

Primero, genere el par de claves SSH (la clave privada/de identidad que usa un cliente SSH para autenticarse cuando inicia sesión en un servidor SSH remoto y la clave pública almacenada como clave autorizada en un sistema remoto que ejecuta un servidor SSH) usando el ssh- comando keygen de la siguiente manera:

# ssh-keygen

Crear un script de shell para múltiples inicios de sesión remotos

A continuación, cree un script de shell que le ayudará a copiar una clave pública a varios hosts Linux remotos.

# vim ~/.bin/ssh-copy.sh

Copie y pegue el siguiente código en el archivo (reemplace las siguientes variables en consecuencia USER_NAME - el nombre de usuario con el que conectarse, HOST_FILE - un archivo que contiene la lista de nombres de host o direcciones IP y ERROR_FILE - un archivo para almacenar cualquier error de comando ssh).

#!/bin/bash
USER_NAME="root"
HOST_FILE="/root/hosts"
ERROR_FILE="/tmp/ssh-copy_error.txt"
PUBLIC_KEY_FILE="$1"

if [ ! -f  $PUBLIC_KEY_FILE ]; then
        echo "File '$PUBLIC_KEY_FILE' not found!"
        exit 1
fi

if [ ! -f $HOST_FILE ]; then
        echo "File '$HOST_FILE' not found!"
        exit 2
fi

for IP in `cat $HOST_FILE`; do
        ssh-copy-id -i $PUBLIC_KEY_FILE [email protected]$IP 2>$ERROR_FILE
        RESULT=$?
        if [ $RESULT -eq 0 ]; then
                echo ""
                echo "Public key successfully copied to $IP"
                echo ""
        else
                echo "$(cat  $ERROR_FILE)"
                echo 
                exit 3
        fi
        echo ""
done

Guarde el archivo y ciérrelo.

Luego haga que el script sea ejecutable con el comando chmod como se muestra.

# chmod +x ssh-copy.sh

Ahora ejecute el script ssh-copy.sh y especifique su archivo de clave pública como el primer argumento como se muestra en la captura de pantalla:

# ./ssh-copy.sh /root/.ssh/prod-rsa.pub

A continuación, use ssh-agent para administrar sus claves, que guarda su clave privada descifrada en la memoria y la usa para autenticar los inicios de sesión. Después de iniciar el ssh-agent , agregue su clave privada de la siguiente manera:

# eval "$(ssh-agent -s)"
# ssh-add  ~/.ssh/prod_rsa

Inicie sesión en el servidor Linux remoto sin contraseña

Ahora puede iniciar sesión en cualquiera de sus hosts remotos sin proporcionar una contraseña para la autenticación de usuario SSH. De esta forma, puede automatizar los procesos entre servidores.

# ssh [email protected]

¡Eso es todo lo que teníamos para ti! Si tiene alguna contribución que hacer en particular para mejorar el script de shell, háganoslo saber a través del formulario de comentarios a continuación.