概要
・スクリプトを用いてLet's Encryptの自動更新をさせます。
・Incoming Webhook を利用して、自動更新の結果をSlackに通知させます。
・Let's Encryptの設定については終わっているものとします。
Webhook URLの取得
以下にアクセス
https://slack.com/services/new/incoming-webhook
チャンネル選択
Webhook URLの確認
スクリプト例
sslcheck.sh
#!/bin/bash
#更新前確認
ssl_check1=$(curl -v https://hogehoge.jp/ 3> /dev/null 2>&1 1>&3 | grep 'subject:' | cut -b 13-50)
ssl_check2=$(curl -v https://hogehoge.jp/ 3> /dev/null 2>&1 1>&3 | grep 'expire date:' | cut -b 17-50)
#変換
date1=$ssl_check2
if [[ $date1 == *GMT* ]];
then
rename_date1=`echo $date1 | sed -e 's/ GMT//g'`
else
rename_date1=$date1
fi
result_date1=`date -d "$rename_date1" "+%Y/%m/%d %T"`
#更新
sudo systemctl stop httpd
sudo certbot renew > /dev/null 2>&1
sudo systemctl start httpd
#更新後確認
ssl_check3=$(curl -v https://hogehoge.jp/ 3> /dev/null 2>&1 1>&3 | grep 'expire date:' | cut -b 17-50)
#変換
date2=$ssl_check3
if [[ $date2 == *GMT* ]];
then
rename_date2=`echo $date2 | sed -e 's/ GMT//g'`
else
rename_date2=$date2
fi
result_date2=`date -d "$rename_date2" "+%Y/%m/%d %T"`
#比較
if [[ $result_date1 < $result_date2 ]]; then
echo -e "ドメイン:\n$ssl_check1" "\n更新前:\n$ssl_check2" "\n更新後:\n$ssl_check3" "\n結果:\n更新完了" | /root/webhook.sh
else
echo -e "ドメイン:\n$ssl_check1" "\n更新前:\n$ssl_check2" "\n更新後:\n$ssl_check3" "\n結果:\n更新失敗" | /root/webhook.sh
fi
webhook.sh
以下参考にさせて頂きました。通知先のWebhook URLやチャンネル名は適宜変更ください。
参考文献: [10分で出来る]シェルスクリプトの結果をslackに投稿
メンション付きで通知させたい場合もあると思います。
メンション付で通知させたい場合は、Webhook送信部分を以下のように変更します。
@hereの場合
curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"text\": \"<!here>${WEBMESSAGE}\" }" ${WEBHOOKURL} >/dev/null
メンバーの場合
curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"text\": \"<@メンバーID>${WEBMESSAGE}\" }" ${WEBHOOKURL} >/dev/null
ユーザグループの場合
curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"text\": \"<!subteam^ユーザグループID|ユーザグループID名>${WEBMESSAGE}\" }" ${WEBHOOKURL} >/dev/null
メンバーIDの確認は、Slackのプロフィールから確認できます。
ユーザグループIDの確認は、ブラウザ版のSlackから確認したいユーザグループのメンションがあるところで右クリック → 検証から確認できます。
実行結果
メンションは付けていません。
Let’s Encryptのサーバ証明書は有効期限の30日前から更新が可能らしいので、有効期限に合わせてcronを設定するのがよさそうです。