Wyszukiwanie w witrynie

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.