MicrosoftExchangeのバナーを監視したいのですが。
コンソールで次のコマンドを実行します。
timeout 1 openssl s_client -connect 192.168.0.5:995 > /tmp/1.txt
出力:
tail -n 4 /tmp/1.txt:
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
+OK The Microsoft Exchange POP3 service is ready.
このコマンドをcronに追加すると、この出力が得られます
tail -n 4 /tmp/1.txt
Start Time: 1488382801
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
Cronとコンソールの違いは何ですか?ありがとうございました。
ほとんどの場合、cron
で実行している場合、リモートサーバーがバナーを発行する前に接続が閉じられました。これは、openssl s_client
がstdioとリモートサーバーへのソケット間の双方向接続を操作するためです。
Stdinが/dev/null
に接続されているため、cron
で実行すると、最初のコピーはすぐに終了します。これにより、openssl
はすぐに終了しました。
これを軽減するには、openssl
の入力を、永久にブロックするもの、さらにはsleep 1
のようなものにリダイレクトします。これにより、timeout
が不要になります。
それでも、1秒間待つことは、接続してバナーを待つための特に脆弱な方法です。タイムアウトが非常に短いだけでなく、バナーを受信したときにタイムアウトの期限が切れる前にコマンドが終了することもありません。このようなものについては、expect
を探しています。
ところで:
他の人はおそらく同意しないでしょうが、この質問での「コンソール」という用語の使用法は不正確だと思います。実際には、anyターミナルセッションで最初に説明した動作が得られます。これは、とりわけ、次のようになります。
xterm
または最新の代替品など)screen
ウィンドウ、「コンソール」という用語は、最後のものだけを指す必要があると思いますが、これらはすべてターミナルセッションです。