我正在尝试使以下脚本适用于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”。有人能告诉我我做错了什么吗?
答案1
您使用的是y
to echo 'my password'
,而不是 to sudo
。
使用块对两个回声进行分组:
{ echo 'my password' ; echo y ; } | sudo ufw reset
sudo
通常从终端而不是标准输入读取密码,除非您提供-S
选项。
答案2
你可以通过以下方式实现:
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; }"
注意:这确实不是一个好主意。最好将其添加
ufw
到文件中的 NOPASSWD 列表中sudoers
。看这里。或者,如果你想重复/自动运行该命令,你可以将其添加为 root cronjob。