Попытка передать две переменные в сценарии удара

Я пытаюсь заставить следующий сценарий работать на ufw команда, которая ожидает, что я нажму y или n для подтверждения моей команды. Кроме того, я хочу передать свой пароль sudo команда (я знаю, плохая идея).

echo 'y' | { echo 'my password'; } | sudo ufw reset

sudo пароль укусил работы, но я получаю следующее сообщение об ошибке от ufw reset команда:

Resetting all rules to installed defaults. Proceed with operation (y|n)? Aborted

Команда прерывается вместо того, чтобы принять 'y', который я пытался отправить ей. Кто-либо может сказать мне, что я делаю неправильно?

4
задан 25 October 2018 в 03:01

2 ответа

Вы передаете по каналу y кому: echo 'my password', не к sudo.

Используйте блок для группировки обоих echos:

{ echo 'my password' ; echo y ; } | sudo ufw reset

sudo обычно читает пароль из терминала, не stdin, если Вы не предоставляете -S опция.

11
ответ дан 23 November 2019 в 11:35

Можно достигнуть его как это:

printf '%s\n%s\n' 'your_password' 'y' | sudo -S ufw reset

или с su -c:

printf '%s\n' 'your_password' | sudo -S su -c "{ yes | ufw reset; }"
  • Это использует миленький инструмент yes вместо echo y.
  • Я предпочитаю printf вместо echo для неизвестных строк.-> Посмотрите это.

Примечание: Это - действительно плохая идея. Лучше добавить ufw к NOPASSWD перечисляют в sudoers файл. Посмотрите здесь. Или если Вы хотите выполнить ту команду неоднократно/автоматически, можно вместо этого добавить его как корень cronjob.

8
ответ дан 23 November 2019 в 11:35

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

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