Назад | Перейти на главную страницу

Bash-скрипт для обновления нескольких серверов, не принимающих ключи RSA

В своей среде я управляю примерно 10 серверами Linux, которые требуют регулярных обновлений пакетов. У меня есть сценарий для подключения к каждому индивидуально и запуска обновления. Кроме того, у меня на каждом сервере установлены ключи RSA. Вот мой код:

hosts=(host1 host2 host3 host4)
read -sp "sudo password (will be used on all servers): " password && echo ""

for host in ${hosts[@]}
do
echo "-------------------------------------------$host----------------"
ssh -t $host "sudo -Sp '' apt-get update <<EOP && sudo apt-get upgrade -y
$password
EOP"
done

Моя цель - read в пароле один раз и apt-get update бегать без подсказки.

В настоящее время при запуске сценария мне предлагается сразу после echo заявление для пароля в каждой системе. При мониторинге файла /var/log/auth.log запись не создается до тех пор, пока я не введу пароль. (Я бы ожидал неудачной попытки входа в систему с ключом RSA).

При подключении напрямую к каждому серверу ключи RSA работают правильно, и их можно проверить, проверив файл /var/log/auth.log. Используя tail -F /var/log/auth.log на сервере, я вижу, что запрос пароля предназначен для аутентификации, а не с использованием ключа RSA.

Я проверил:

я так думаю expect может быть ответом. Ожидать это инструмент для автоматизации интерактивных приложений, таких как telnet, ftp, passwd, fsck, rlogin, tip и т. д. Expect действительно делает эти вещи тривиальными. Expect также полезен для тестирования этих же приложений. А добавив Tk, вы также можете обернуть интерактивные приложения в графические интерфейсы X11. Также взгляните на это нить