Zoeken op website

Stel wachtwoordloze SSH-aanmelding in voor meerdere externe servers met behulp van script


Op SSH Key gebaseerde authenticatie (ook wel public-key authenticatie genoemd) maakt authenticatie zonder wachtwoord mogelijk en is een veiligere en veel betere oplossing dan wachtwoordauthenticatie. Een groot voordeel van SSH-wachtwoordloos inloggen, laat staan beveiliging, is dat het automatisering van verschillende soorten cross-server-processen mogelijk maakt.

In dit artikel laten we zien hoe je een SSH-sleutelpaar maakt en de publieke sleutel in één keer naar meerdere externe Linux-hosts kopieert, met een shellscript.

Maak een nieuwe SSH-sleutel in Linux

Genereer eerst het SSH-sleutelpaar (de privé-/identiteitssleutel die een SSH-client gebruikt om zichzelf te authenticeren bij het inloggen op een externe SSH-server en de openbare sleutel die is opgeslagen als een geautoriseerde sleutel op een extern systeem waarop een SSH-server draait) met behulp van de ssh-keygen commando als volgt:

ssh-keygen

Maak een Shell-script voor meerdere externe aanmeldingen

Maak vervolgens een shellscript dat helpt bij het kopiëren van een publieke sleutel naar meerdere externe Linux-hosts.

vim ~/.bin/ssh-copy.sh

Kopieer en plak de volgende code in het bestand (vervang de volgende variabelen dienovereenkomstig USER_NAME – de gebruikersnaam waarmee u verbinding wilt maken, HOST_FILE – een bestand dat de lijst met hostnamen of IP-adressen bevat en ERROR_FILE – een bestand waarin eventuele ssh-opdrachtfouten worden opgeslagen).

#!/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

Sla het bestand op en sluit het.

Maak het script vervolgens uitvoerbaar met de opdracht chmod, zoals weergegeven.

chmod +x ssh-copy.sh

Voer nu het script ssh-copy.sh uit en specificeer uw openbare sleutelbestand als het eerste argument, zoals weergegeven in de schermafbeelding:

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

Gebruik vervolgens ssh-agent om uw sleutels te beheren, die uw gedecodeerde privésleutel in het geheugen bewaren en deze gebruiken om aanmeldingen te verifiëren. Nadat u de ssh-agent heeft gestart, voegt u als volgt uw privésleutel eraan toe:

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

Log in op de externe Linux-server zonder wachtwoord

Nu kunt u inloggen op een van uw externe hosts zonder een wachtwoord op te geven voor SSH-gebruikersauthenticatie. Op deze manier kunt u cross-server-processen automatiseren.

ssh [email 

Dat is alles wat we voor je hadden! Als u een bijdrage(en) wilt leveren, in het bijzonder aan het verbeteren van het shellscript, kunt u ons dit laten weten via het onderstaande feedbackformulier.