ようこそNICのホームページへ(なが〜い試運転中 from 2004年)
  • @nifty atnifty-ddns ddo.jp dip.jp   HP パソコン 健康 落語 海外 思うまま 電子工作
  • QNAP TS231P NASからServerをシャットダウンさせるスクリプト説明
    今更ながらですが、自分なりの解釈をしましたので備忘録として記入

  • Last update:2018/04/26    Build:2018/04/26
  •  
    ssh_askpass を使ってsshにパスワードを渡す過程の説明
    (自分なりの解釈、間違いがあるかも??)

    cronから起動されるshスクリプトの中の一行
    
    @        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
    

    cat ssh-askpass-2.sh(Ashスクリプト)
    
    #!/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)を実行する
    
    参考としたページです

    電子工作へ     HomePage     このページのトップ