Búsqueda de sitios web

Configurar el inicio de sesión SSH sin contraseña para varios servidores remotos mediante un 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 con contraseña. Una de las principales ventajas del inicio de sesión SSH sin contraseña, y mucho menos 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 a 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 un cliente SSH utiliza 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 comando ssh-keygen comando de la siguiente manera:

ssh-keygen

Cree 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 en 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 $USER_NAME@$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 primer argumento como se muestra en la captura de pantalla:

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

A continuación, utilice ssh-agent para administrar sus claves, que guarda su clave privada descifrada en la memoria y la utiliza para autenticar los inicios de sesión. Después de iniciar ssh-agent, agréguele 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 manera, puede automatizar procesos entre servidores.

ssh [email 

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