Аутентификация на основе ключей 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
Скрипты