Как автоматически ответить на многоступенчатую команду?

Я новичок в терминале Ubuntu. У меня есть команда для подключения к серверу VPN. на первом шаге я должен набрать sudo vpn_command и поэтому я должен ввести пароль root, затем на следующем шаге я должен ввести «yes» и vpn username и vpn password соответственно.

Я хочу сделать все эти действия в одной команде. ты можешь мне помочь?

0
задан 17 April 2019 в 17:32

1 ответ

1114 Это возможно. Хотя, как упоминалось в комментариях, вероятно, не самая лучшая идея. Обратите внимание, что вы должны использовать свой собственный пароль для sudo, а не пароль root (в этом и заключается смысл запуска sudo). Вероятно, лучше настроить sudo, чтобы не спрашивать пароль. Также ваш vpn, вероятно, имеет опцию, которая принимает имя файла с полномочиями.

Программа, которая вам нужна, называется ожидаемо. Итак, сначала sudo apt-get install expect. Ожидайте, как следует из его названия, ожидает строки на терминале и отправляет обратно другие строки. Это идеальный инструмент, когда программа запрашивает ответ. Это довольно сложная программа, но здесь ее можно использовать самым простым способом:

  1. запустить команду sudo и вывести на терминал вывод
  2. , когда вы видите эту строку, отправьте этот ответ
  3. когда вы видите эту другую строку, отправьте этот другой ответ
  4. и т. Д ...

см., Например, вопрос 307067 Askubuntu или вопрос 38458053 о переполнении стека. Ваша поисковая система найдет много примеров, как только вы узнаете, что вам нужно запросить «примеры паролей».

sudo не всегда будет спрашивать ваш пароль. если вы повторно запустите команду sudo в том же терминале в течение 5 минут или около того, во второй раз она не будет запрашивать пароль. В таких ситуациях вы можете использовать ожидаемое время ожидания.

Вы могли бы написать скрипт myexpectedcript с таким содержанием:

#!/usr/bin/expect -d
set timeout 5

set pw {YOUR ubuntu GNU/linux P4ßw0rd}
set vpnuser {yourvpnusername}
set vpnpass {vpn-PAs$w0rd}
spawn sudo -p sudoisaskingforyourpassword vpncommand -foo -b ar etc...

expect "sudoisaskingforyourpassword" { send "$pw\n" }
expect {Do you really want to do that} { send "Yes\n" }
expect {vpn user prompt} { send "$vpnuser\n" }
expect {vpn password prompt} { send "$vpnpass\n" }
interact

сделать его исполняемым с помощью chmod 700 myexpectscript, а затем запустить ./myexpectscript. Измените -d на -f, чтобы избавиться от выходного сигнала отладки. Вы должны настроить время ожидания, команду и различные запросы и пароли.

Все это, конечно, полностью не проверено.

И последнее, но не менее важное: ожидаемый использует язык TCL . TCL - очень изящный и дружелюбный язык, он просто придирчив к тому, кто его друзья. Если вы получаете ошибки, будьте готовы долго читать документы.

0
ответ дан 17 April 2019 в 17:32

Другие вопросы по тегам:

Похожие вопросы: