4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Let's Encryptの自動更新結果をIncoming Webhookを利用してSlackに通知する

Last updated at Posted at 2022-03-23

概要

・スクリプトを用いてLet's Encryptの自動更新をさせます。
・Incoming Webhook を利用して、自動更新の結果をSlackに通知させます。
・Let's Encryptの設定については終わっているものとします。

Webhook URLの取得

以下にアクセス

https://slack.com/services/new/incoming-webhook

チャンネル選択

通知したいチャンネルを選択して追加
image.png

Webhook URLの確認

image.png

スクリプト例

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のプロフィールから確認できます。
image.png

ユーザグループIDの確認は、ブラウザ版のSlackから確認したいユーザグループのメンションがあるところで右クリック → 検証から確認できます。
image.png
image.png

実行結果

メンションは付けていません。
Let’s Encryptのサーバ証明書は有効期限の30日前から更新が可能らしいので、有効期限に合わせてcronを設定するのがよさそうです。
image.png

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?