Я пытаюсь заставить следующий сценарий работать на 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', который я пытался отправить ей. Кто-либо может сказать мне, что я делаю неправильно?
Вы передаете по каналу y
кому: echo 'my password'
, не к sudo
.
Используйте блок для группировки обоих echos:
{ echo 'my password' ; echo y ; } | sudo ufw reset
sudo
обычно читает пароль из терминала, не stdin, если Вы не предоставляете -S
опция.
Можно достигнуть его как это:
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.