我molly-guard
在所有机器上使用,但有时我想 ssh 进入机器并执行一个脚本,作为最后一步应该重新启动该机器,但随后出现问题molly-guard
并提示我输入主机名。
我正在寻找类似--molly-guard-do-nothing
标志的东西,但它不会什么都不做,它会被调用--molly-guard-do-not-ask
并且不会要求确认。
手册页没有这方面的信息,所以我想知道是否有解决方法。
只有当我 ssh 进入机器时,我才需要它来工作;也就是说,在 cronjob 左右的上下文中永远不需要它,但我不介意它是否也能工作。
更具体地说,这是有问题的脚本:
sudo apt-get update && apt list --upgradable
echo ""
echo "---- ok. what next? ----"
echo ""
read -n 1 -p "exit or upgrade? (E/u) " ans;
case $ans in
u|U) printf "\n\nok, invoking 'sudo apt-get upgrade'\n\n"; sudo apt-get upgrade;;
*) printf "\nok, exited\n\n"; exit;;
esac
echo ""
echo "---- ok. what next? ----"
echo ""
read -n 1 -p "exit, autoremove or reboot? (E/a/r) " ans;
case $ans in
a|A) printf "\n\nok, invoking 'sudo apt-get autoremove'\n\n"; sudo apt-get autoremove;;
r|R) printf "\n\nok, invoking 'sudo reboot'\n\n"; sudo reboot;;
*) printf "\nok, exited\n\n"; exit;;
esac
echo ""
echo "---- ok. what next? ----"
echo ""
read -n 1 -p "exit or reboot? (E/r) " ans;
case $ans in
r|R) printf "\n\nok, invoking 'sudo reboot'\n\n"; sudo reboot;;
*) printf "\nok, exited\n\n"; exit;;
esac
默认情况下
molly-guard
,如果它认为它在交互式 SSH 登录中,只会提示输入主机名。它通过检查其标准输入流是否连接到充当终端的东西来确定“交互”状态。(具体来说,它的30-query-hostname
子脚本test -t 0 || exit 0
在到达发出提示的代码之前执行。)您可以通过运行脚本并将其标准输入从非终端重定向来强制该测试失败。
/dev/null
将是传统的选择,例如:如果您的脚本需要在重新启动之前从终端获取输入,因此您无法在其标准输入重定向的情况下运行该脚本,那么您可以修改脚本以仅针对该
reboot
命令重定向标准输入。甚至可以给你的脚本一个选项,告诉它是否在 上进行重定向reboot
,这样默认情况下它仍然会受到molly-guard
的干预。