2016-06-20 3 views
0

予想されるスクリプトでは、ssh経由でシステムにリモートログインするときにsudo su -を実行します。/var/log/secureに特定の文字列をチェックインし、その文字列期待するスクリプトのチェック/ var/log/message

expect << 'EOF' 
    spawn ssh -q $env(U1)@$env(S1) 
    expect "password:" { 
     send $env(P1)\r 
    } 
    expect "$env(U1)@$env(S1)" { 
     send "sudo su - \r" 
    } 
    expect "password" { 
     send $env(P1)\r 
    } 

    expect { 
     "# " { 
      send "grep 'pam_unix(su-l:session): session opened for user root by' /var/log/secure" 
     } 
     "Authentication failure" { 
      send_user "Su ROOT Fail ...... Fail\n" 
      send \x03 
     } 
    } 
EOF 

答えて

1

あなたが特定の文字列を検索しているので、あなたがfgrepを使用してオフに最高だ(....」はgrepを送信)が存在するかどうか。あなただけの文字列が存在するかどうかを気にして、いないかどうか場合何か他のものは、あなたがそれを処理するために容易であるという結果を得るために-qオプションと少しシェル策略を使用し、その周りにあります:

fgrep -q '....' /var/log/secure && echo FOUND || echo ABSENT 

次に、あなたが働く方法であなたの期待スクリプトにそれをプラグインする必要があります。

# Factored out for line-length reasons. :-) 
set searchTerm "pam_unix(su-l:session): session opened for user root by" 
expect { 
    "# " { 
     send "fgrep -q '$searchTerm' /var/log/secure && echo FOUND || echo ABSENT" 
    } 
    "Authentication failure" { 
     send_user "Su ROOT Fail ...... Fail\n" 
     send \x03 
     #### STOP THE EXPECT SCRIPT RUNNING! 
     close 
     exit 1 
    } 
} 
expect { 
    "FOUND" { 
     # ... 
    } 
    "ABSENT" { 
     # ... 
    } 
} 

良いを書くの芸術スクリプトは、故障モードを見込んでいる期待:。特に、我々は昇格する障害が発生した場合、コードはが検索を実行しないであろうことを確認する必要がありますまた、あなたはおそらく上昇セッションの終わりには、全体的なセッションの最後であることをようsend "exec sudo su -\r"を使用するべきです。それが動作

+0

おかげで、周りを再生するために私にしばらく時間がかかりました –

関連する問題