🔐 Настройка входа по SSH без пароля для нескольких удаленных серверов с помощью скрипта

Аутентификация на основе ключей SSH (также известная как аутентификация с открытым ключом) позволяет использовать аутентификацию без пароля, и это более безопасное и гораздо лучшее решение, чем аутентификация по паролю.

Одним из основных преимуществ входа в систему без пароля по SSH, не говоря уже о безопасности, является то, что он позволяет автоматизировать различные виды межсерверных процессов.

В этой статье мы продемонстрируем, как создать пару ключей SSH и скопировать открытый ключ на несколько удаленных хостов Linux одновременно с помощью скрипта шелла.

Создайте новый ключ SSH на Linux

Сначала сгенерируйте пару ключей SSH (закрытый ключ / ключ идентификации, который SSH-клиент использует для аутентификации при входе на удаленный SSH-сервер, и открытый ключ, хранящийся в качестве авторизованного ключа в удаленной системе, на которой запущен SSH-сервер), используя ssh- keygen следующим образом:

# ssh-keygen




Создание скрипта bash для нескольких удаленных входов

Затем создайте скрипт, который поможет скопировать открытый ключ на несколько удаленных хостов Linux.

# vim ~/.bin/ssh-copy.sh

Скопируйте и вставьте следующий код в файл (замените следующие переменные соответственно USER_NAME – имя пользователя для подключения, HOST_FILE – файл, содержащий список имен хостов или IP-адресов, и ERROR_FILE – файл для хранения любых ошибок команды 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' не найден!"

        exit 1

fi



if [ ! -f $HOST_FILE ]; then

        echo "File '$HOST_FILE' не найден!"

        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 "Открытый ключ успешно скопирован на $IP"

                echo ""

        else

                echo "$(cat  $ERROR_FILE)"

                echo 

                exit 3

        fi

        echo ""

done

Сохраните файл и закройте его.

Затем сделайте скрипт исполняемым с помощью команды chmod, как показано далее:

# chmod +x ssh-copy.sh

Теперь запустите скрипт ssh-copy.sh и укажите свой файл открытого ключа в качестве первого аргумента, как показано ниже:

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

Затем используйте ssh-agent для управления своими ключами, который хранит ваш расшифрованный закрытый ключ в памяти и использует его для аутентификации логинов.

После запуска ssh-agent добавьте к нему свой закрытый ключ следующим образом:

# eval "$(ssh-agent -s)"

# ssh-add  ~/.ssh/prod_rsa

Вход на удаленный сервер Linux без пароля

Теперь вы можете войти на любой из своих удаленных хостов, не вводя пароль для аутентификации пользователя SSH.

Таким образом, вы можете автоматизировать межсерверные процессы.

# ssh root@10.2.32.12

Если у вас есть какие-либо особые возможности для улучшения скрипта, сообщите нам об этом через форму обратной связи ниже.

 





2020-10-05T11:36:32
Скрипты