모든 컴퓨터에서 사용 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-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
.