cronと端末のopenssl s_client呼び出しの違い

cronと端末のopenssl s_client呼び出しの違い

Microsoft Exchangeバナーを監視したいと思います。

コンソールでコマンドを実行すると、次のようになります。

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) 
---

クローンとコンソールの違いは何ですか?ありがとうございます。

答え1

で実行すると、cronリモートサーバーがバナーを送信する前に接続が閉じられる可能性があります。これはopenssl s_client、stdioとリモートサーバーのソケット間で双方向接続が実行されるためです。

  • stdinをソケットにコピーします。
  • ソケットから受け取ったデータを標準出力にコピーします。

で実行するとcronstdinがに接続されているため、最初のコピーはすぐに終了し/dev/nullますopenssl

openssl永久にブロックされたコンテンツに入力をリダイレクトすることでこれを軽減することができ、より良い方法はsleep 1そのコンテンツの必要性を排除することですtimeout

それにもかかわらず、しばらく待つことは、バナーを接続して待つのに特に簡単ではありません。かなり短いタイムアウトであるだけでなく、バ​​ナーが受信されると、タイムアウトが期限切れになる前にコマンドは終了しません。このようなものを探していますexpect


ちなみに:

他の人は同意しないかもしれませんが、私はこの質問で「コンソール」という言葉を使用したことが正確ではないと思います。実際に最初に説明した動作が表示されます。どのターミナルセッションは何よりも次のことができます。

  • SSH端末セッション、
  • xtermGUIのターミナルエミュレータ(類似または最新の代替)
  • screen
  • シリアルモデム接続、
  • または実際のシステムコンソール。

「コンソール」という言葉は、特に最後のセッションを指すべきだと思います。しかし、これはすべてターミナルセッションです。

答え2

Cron は、ジョブで最小限の環境変数セットを使用します。コンソールで使用する以上のアドインを使用することもできます。

コマンドを使用すると、コンソールとcronでtimeoutsとopensslを使用するときにwhich <programname>どこにいるかを確認できます。

PATHスクリプトの先頭に変数を設定することもできます。

関連情報