Molly-Guardを一時的に無効にします。

Molly-Guardを一時的に無効にします。

すべてのコンピュータで使用されます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

答え1

デフォルトでは、対話型molly-guardSSHログインにあると判断された場合にのみホスト名の入力を求められます。標準入力ストリームが端末として機能するデバイスに接続されていることを確認して、「会話型」状態を決定します。 (特に、対応する添え30-query-hostname字は、test -t 0 || exit 0プロンプトを発行するコードに到達する前に実行されます。)

スクリプトを実行してビターミナルから標準入力をリダイレクトすることで、このテストを強制的に失敗させることができます。 /dev/null次の伝統的なオプションになります。

$ my_script_that_will_trigger_a_reboot </dev/null

スクリプトを再起動する前に端末から入力を受け取り、標準入力がリダイレクトされた状態でスクリプトを実行できない場合は、コマンドに対してのみ標準入力をリダイレクトするようにスクリプトを変更できますreboot。おそらく、スクリプトにリダイレクトするかどうかを知らせるオプションを提供して、デフォルトでrebootまだ介入できるようにすることもできますmolly-guard

関連情報