Bashで電子メールコンテンツのMD5チェックサムを追加するには?

Bashで電子メールコンテンツのMD5チェックサムを追加するには?

cronを介して送信された自動生成された電子メール通知にいくつかの出力行がないことがわかりました。 AVCエラーがないことを確認したら、電子メールコンテンツのMD5チェックサムを追加して、送信中に電子メールの整合性が損なわれたかどうかを確認したいと思います。電子メールを生成する次のスクリプトがあります。

{
  echo -e "\nUptime";
  uptime;

  last -x --since yesterday;
} | mail -s "Info" user

MD5チェックサムのみを取得するには、次のことができることがわかります。

{
  echo -e "\nUptime";
  uptime;

  last -x --since yesterday;
} | openssl md5

しかし、チェックサムを電子メールコンテンツとどのように組み合わせるのですか?

答え1

MD5チェックサムが特に必要な場合は、内容をファイルにパイプしてチェックサムを作成し、ファイルとチェックサム(区切り文字を含む)をメッセージにパイプすることができます。

MD5を使う

MD5の合計を使用する場合は、スクリプトを次のように編集して一時ファイルに書き込み、チェックサムを作成して追加してからメールを送信できます。

#!/bin/sh

outfile=$(mktemp)
echo -e "\nUptime"                                    > $outfile 2>&1
uptime                                               >> $outfile  2>&1
last -x --since yesterday                            >> $outfile  2>&1

md5=$(md5sum $outfile | cut -f1 -d' ')
echo-e  "\n==============================\n${md5}\n" >> $outfile 2>&1
cat $outfile | mail -s "Info" user

rm $outfile  # don't forget this - clean up your /tmp!

これにより、すべてのSTDERRメッセージとSTDOUTメッセージがログファイルにキャプチャされ、電子メールで送信され、下部にMD5チェックサムが追加されるため、出力をファイルに戻して一致するかどうかを再確認できます。

GPGを使う

あるいは、サーバーがメッセージに署名するためにGPGキーを生成(または既存)することもできます。このキーは自動化された方法でメッセージに署名するように設定されているため、セキュリティを維持する必要があるか、高レベルの信頼が必要な項目にはこのキーを使用しないことをお勧めします。コンピュータが損傷すると、このキーも破損する可能性があるためです。

最も簡単な方法は、gpg --gen-keyサーバー(または何でも)からGPGキーを生成することです。ほとんどの詳細は重要ではありませんが、パスワードは何ですか?これにより、次のことができます。

  • 空のパスワードを設定してください(推奨しない- パスワードのないキーを絶対に生成しないでください)
  • パスワードを設定して制限付きファイルに保存する(chmod 400
  • パスワードを設定してGPGコマンドに渡してください。

この例は、適切な権限を持つファイルに追加されたパスワードを持つキーを示しています。次のようにキーを生成してパスワードを設定します。

~ » gpg --gen-key
# enter in details for key
    ...
    pub   2048R/B44FD582 2015-02-28 [expires: 2015-03-01]
          Key fingerprint = CFAD 2D53 BB7F CA22 147C  9300 E858 EE8A B44F D582
    uid                  mytestkey (This is my key) <[email protected]>
    sub   2048R/D3AEDE76 2015-02-28 [expires: 2015-03-01]

~ » echo -n 'mypassphrase' > ~/.ssh/gpgsignkey
~ » chmod 400 ~/.ssh/gpgsignkey
~ » gpg -a --export [email protected] > myserver.key.asc

署名に使用できるキーがサーバーにあり、パスワードは安全な場所の制限付きファイルにあり(〜/ .sshは非常に厳密に保持されています)、インポートできる公開myserver.key.asc鍵があります。ローカルコンピュータから受信したメッセージを確認してください。

その後、cronジョブを変更してコマンドを実行するスクリプトを実行し、gpgを介して出力をパイプしてメールサーバーに配信されるメッセージに署名できます。

#!/bin/sh

outfile=$(mktemp)
echo -e "\nUptime"                                    > $outfile 2>&1
uptime                                               >> $outfile  2>&1
last -x --since yesterday                            >> $outfile  2>&1

cat $outfile | gpg --clearsign -u [email protected] --passphrase-file /root/.ssh/gpgsignkey | mail -s "Info" user

rm $outfile

その後、公開鍵を電子メールクライアント(サポートされている場合)またはその他の鍵検証メカニズムにインポートして、受信したメッセージが実際に送信されたメッセージであることを確認できます。

関連情報