Recherche de site Web

Configurer la connexion SSH sans mot de passe pour plusieurs serveurs distants à l’aide d’un script


L’authentification basée sur une clé SSH (également connue sous le nom d’authentification par clé publique) permet une authentification sans mot de passe et constitue une solution plus sûre et bien meilleure que l’authentification par mot de passe. L’un des principaux avantages de la connexion SSH sans mot de passe, sans parler de la sécurité, est qu’elle permet l’automatisation de divers types de processus interserveurs.

Dans cet article, nous allons montrer comment créer une paire de clés SSH et copier la clé publique sur plusieurs hôtes Linux distants à la fois, avec un script shell.

Créer une nouvelle clé SSH sous Linux

Tout d’abord, générez la paire de clés SSH (la clé privée/d’identité qu’un client SSH utilise pour s’authentifier lorsqu’il se connecte à un serveur SSH distant et la clé publique stockée en tant que clé autorisée sur un système distant exécutant un serveur SSH) à l’aide de la commande ssh-keygen comme suit :

# ssh-keygen

Création d’un script shell pour plusieurs connexions à distance

Ensuite, créez un script shell qui vous aidera à copier une clé publique sur plusieurs hôtes Linux distants.

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

Copiez et collez le code suivant dans le fichier (remplacez les variables suivantes en conséquence USER_NAME – le nom d’utilisateur avec lequel se connecter, HOST_FILE – un fichier contenant la liste des noms d’hôtes ou des adresses IP, et ERROR_FILE – un fichier pour stocker les erreurs de commande 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

Enregistrez le fichier et fermez-le.

Rendez ensuite le script exécutable avec la commande chmod comme indiqué.

# chmod +x ssh-copy.sh

Exécutez maintenant le script ssh-copy.sh et spécifiez votre fichier de clé publique comme premier argument, comme indiqué dans la capture d’écran :

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

Ensuite, utilisez ssh-agent pour gérer vos clés, qui contient votre clé privée déchiffrée en mémoire et l’utilise pour authentifier les connexions. Après avoir démarré ssh-agent, ajoutez-y votre clé privée comme suit :

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

Se connecter à un serveur Linux distant sans mot de passe

Vous pouvez désormais vous connecter à n’importe lequel de vos hôtes distants sans fournir de mot de passe pour l’authentification de l’utilisateur SSH. De cette façon, vous pouvez automatiser les processus inter-serveurs.

# ssh [email 

C’est tout ce que nous avions pour vous ! Si vous avez des contributions à apporter, en particulier pour améliorer le script shell, faites-le nous savoir via le formulaire de commentaires ci-dessous.

Articles connexes: