Reboot

暫時禁用 molly-guard

  • July 13, 2019

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將是傳統的選擇,例如:

$ my_script_that_will_trigger_a_reboot </dev/null

如果您的腳本需要在重新啟動之前從終端獲取輸入,因此您無法在其標準輸入重定向的情況下執行該腳本,那麼您可以修改腳本以僅針對該reboot命令重定向標準輸入。甚至可以給你的腳本一個選項,告訴它是否在 上進行重定向reboot,這樣預設情況下它仍然會受到molly-guard的干預。

引用自:https://unix.stackexchange.com/questions/529994