QNAP TS231P NASからServerをシャットダウンさせるスクリプト説明
今更ながらですが、自分なりの解釈をしましたので備忘録として記入
@ A
echo $password | /share/homes/user2/sd/ssh-askpass-2.sh (次の行に継続)
ssh user2@192.168.1.999 -p port_num "sudo shutdown -P now"
B
#!/bin/bash
if [ -n "$PASSWORD" ]; then C
cat <<< "$PASSWORD" D
exit 0 E
fi
read PASSWORD F
export SSH_ASKPASS=$0 G
export PASSWORD H
export DISPLAY=dummy:0 I
exec setsid "$@"
J K L
@ echo を使ってパスワードを標準出力へ パイプで 標準入力にパスワードを渡す A shスクリプト(ssh-askpass-2.sh)を動かす C shスクリプトでpasswordに文字列があるか判断(-n:1文字以上) 無いのでif文を抜ける F passwordを標準入力から読み込む(@echoからパイプで渡されたpasswordが入る) G 環境変数SSH_ASKPASSに自分自身($0)のシェルをセットする(ssh-askpass-2.sh) H 環境変数PASSWORDをセット I 環境変数DISPLAYにダミーをセット J 現プロセスを置き換えてコマンド(K)を実行 K 新たなプロセスを起動しシェルの引数全て($@)を渡す ($@:ssh user2@192.168.1.999 -p port_num "sudo shutdown -P now") L 引数全て($@) B ssh が起動される。 ssh が制御できる端末を持っておらず、環境変数DISPLAYと環境変数SSH_ASKPASSが 設定されている場合、ssh は環境変数SSH_ASKPASSに指定されたプログラムを起動し x11ウィンドウズを使ってパスワードを要求する。 C 再度shスクリプト(ssh-askpass-2.sh)が起動され、if文でパスワードが1文字以上あるので D cat が標準入力からパスワードを読み込み、標準出力へ出す。 E シェルの終了 あとはssh がログオンして指定されたコマンド(sudo shutdown -P now)を実行する