Вот ожидаемый сценарий, который я использую для этой цели:
#!/usr/bin/expect
send_user "password: "
set old_timeout $timeout
set timeout -1
expect_user -re "(.*)\n"
send_user "\n"
set timeout $old_timeout
set password "$expect_out(1,string)\r"
spawn /bin/bash
interact {
-o -nobuffer "assword: " {
send $password
}
}
Вышеприведенная программа запрашивает пароль у конечного пользователя, а затем сохраняет его в переменной пароля. Таким образом, пароль никогда не записывается в файл, но ожидается, что будет отображен вывод на терминал. Существует код, который можно добавить, чтобы отключить эхо, но я его не знаю случайно.
Ожидайте, затем запускает интерактивную оболочку bash.
С этого момента ожидайте отзывов весь вывод на терминал. Если выводится строка, содержащая «assword:», ожидаемый выводит сохраненную переменную пароля.
Кстати, я не фанат ожиданий, но я нахожу эту программу полезной во многих случаях, включая s sh.
Я также нашел sshpass полезным для вашей конкретной проблемы. Я также использовал ansible для аналогичной работы - но у вас здесь достаточно, чтобы решить вашу проблему.