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.