Как использовать autoexpect для передачи пароля в команду:
Эти шаги иллюстрируются рабочим столом Ubuntu 12.10. Точные команды для вашего дистрибутива могут немного отличаться.
Это опасно, потому что вы рискуете раскрыть любой пароль, который вы используете, любому, кто может прочитать файл сценария autoexpect.
НЕ ОБРАЩАЙТЕ свой пароль root или пароль опытного пользователя, передавая их через ожидаемый, как это. Корневые наборы найдут это в одно мгновение, и ваша коробка будет в собственности.
EXPECT порождает процесс, читает текст, который приходит, а затем отправляет текст, предопределенный в файле сценария.
Убедитесь, что у вас установлены expect
и autoexpect
:
sudo apt-get install expect
sudo apt-get install expect-dev
Читайте об этом:
man expect
man autoexpect
Перейдите в свой домашний каталог:
cd /home/el
Пользователь el
не может преобразовать файл в корневой каталог и должен ввести пароль:
touch testfile.txt
sudo chown root:root testfile.txt
[enter password to authorize the changing of the owner]
Это ввод пароля, который мы хотим автоматизировать. Перезапустите терминал, чтобы sudo снова запросило у нас пароль. Снова перейдите в / home / el и сделайте следующее:
touch myfile.txt
autoexpect -f my_test_expect.exp sudo chown root:root myfile.txt
[enter password which authorizes the chown to root]
autoexpect done, file is my_test_expect.exp
Вы создали my_test_expect.exp
файл. Ваш суперсекретный пароль хранится в виде открытого текста в этом файле. Это должно сделать вас очень неудобно. Смягчить некоторый дискомфорт, максимально ограничив права доступа и владельца:
sudo chown el my_test_expect.exp //make el the owner.
sudo chmod 700 my_test_expect.exp //make file only readable by el.
Вы видите эти виды команд внизу my_test_expect.exp
:
set timeout -1
spawn sudo chown root:root myfile.txt
match_max 100000
expect -exact "\[sudo\] password for el: "
send -- "YourPasswordStoredInPlaintext\r"
expect eof
Вам необходимо убедиться, что приведенные выше ожидаемые команды являются подходящими. Если сценарий автоэкспонирования слишком чувствительный или недостаточно чувствительный, он будет зависать. В этом случае это приемлемо, потому что ожидающий ожидает текст, который всегда будет поступать.
Запустите ожидаемый сценарий от имени пользователя el:
expect my_test_expect.exp
spawn sudo chown root:root myfile.txt
[sudo] password for el:
Пароль, содержащийся в my_test_expect.exp, был передан пользователем в эл. Чтобы узнать, был ли принят пароль, посмотрите myfile.txt
:
ls -l
-rw-r--r-- 1 root root 0 Dec 2 14:48 myfile.txt
Это сработало, потому что это root, и el никогда не вводил пароль. Если вы откроете свой пароль root, sudo или опытного пользователя с помощью этого сценария, то получить root на вашем компьютере будет легко. Таково наказание за систему безопасности, которая позволяет всем без вопросов.