В своей среде я управляю примерно 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. Также взгляните на это нить