Recherche de site Web

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


L'authentification par 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écurisée et bien meilleure que l'authentification par mot de passe. L'un des principaux avantages de la connexion sans mot de passe SSH, sans parler de la sécurité, est qu'elle permet l'automatisation de divers types de processus inter-serveurs.

Dans cet article, nous montrerons 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 lors de la connexion à 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 du ssh-keygen comme suit :

ssh-keygen

Créer 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 qui contient la liste des noms d'hôtes ou des adresses IP , et ERROR_FILE – un fichier pour stocker toutes 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 conserve en mémoire votre clé privée déchiffrée et l'utilise pour authentifier les connexions. Après avoir démarré le ssh-agent, ajoutez-y votre clé privée comme suit :

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

Connectez-vous au 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 une ou plusieurs contributions à apporter en particulier pour améliorer le script shell, faites-le-nous savoir via le formulaire de commentaires ci-dessous.