Skonfiguruj logowanie SSH bez hasła dla wielu serwerów zdalnych za pomocą skryptu
Uwierzytelnianie oparte na kluczu SSH (znane również jako uwierzytelnianie za pomocą klucza publicznego) pozwala na uwierzytelnianie bez hasła i jest bezpieczniejszym i znacznie lepszym rozwiązaniem niż uwierzytelnianie hasłem. Jedną z głównych zalet logowania SSH bez hasła, nie mówiąc już o bezpieczeństwie, jest to, że pozwala na automatyzację różnego rodzaju procesów między serwerami.
W tym artykule pokażemy, jak utworzyć parę kluczy SSH i skopiować klucz publiczny do wielu zdalnych hostów Linux jednocześnie za pomocą skryptu powłoki.
Utwórz nowy klucz SSH w systemie Linux
Najpierw wygeneruj parę kluczy SSH (klucz prywatny/identyfikacyjny, którego używa klient SSH do uwierzytelnienia podczas logowania się do zdalnego serwera SSH oraz klucz publiczny przechowywany jako autoryzowany klucz w zdalnym systemie, na którym działa serwer SSH), używając ssh-keygen w następujący sposób:
ssh-keygen
Utwórz skrypt powłoki dla wielu zdalnych logowań
Następnie utwórz skrypt powłoki, który pomoże w skopiowaniu klucza publicznego do wielu zdalnych hostów z systemem Linux.
vim ~/.bin/ssh-copy.sh
Skopiuj i wklej poniższy kod do pliku (zamień odpowiednio zmienne USER_NAME
– nazwa użytkownika, z którym chcesz się połączyć, HOST_FILE
– plik zawierający listę nazw hostów lub adresów IP i ERROR_FILE
– plik do przechowywania wszelkich błędów poleceń 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
Zapisz plik i zamknij go.
Następnie uczyń skrypt wykonywalnym za pomocą polecenia chmod, jak pokazano.
chmod +x ssh-copy.sh
Teraz uruchom skrypt ssh-copy.sh
i jako pierwszy argument podaj plik klucza publicznego, jak pokazano na zrzucie ekranu:
./ssh-copy.sh /root/.ssh/prod-rsa.pub
Następnie użyj ssh-agent
do zarządzania kluczami, które przechowują odszyfrowany klucz prywatny w pamięci i używają go do uwierzytelniania logowania. Po uruchomieniu ssh-agent
dodaj do niego swój klucz prywatny w następujący sposób:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/prod_rsa
Zaloguj się do zdalnego serwera Linux bez hasła
Teraz możesz zalogować się do dowolnego zdalnego hosta bez podawania hasła w celu uwierzytelnienia użytkownika SSH. W ten sposób można zautomatyzować procesy międzyserwerowe.
ssh [email
To wszystko, co dla Ciebie przygotowaliśmy! Jeśli chcesz wnieść jakiś wkład w ulepszenie skryptu powłoki, daj nam znać za pomocą poniższego formularza opinii.