とーますメモ

Ruby on Rails / Goなどの学習メモ

【SSH】ログイン時にSlackに通知する

下記のサイトさんのやり方を参考に作成
[Linux]SSHログイン時にメール/Slackで通知する – 備忘録の覚書

以下の"XXX.XXX.XXX.XXX"箇所は信頼できるIPを設定
半角スペースを入れることで複数指定可能。
e.g.) "XXX.XXX.XXX.XXX YYY.YYY.YYY.YYY"

{{ slack_login_alert_webhook_url }}にはSlackのwebhook URLを設定。

#!/bin/bash

SOURCE_IP=${SSH_CLIENT%% *}
# 信頼するIPを指定
TRUST_IP_LIST="XXX.XXX.XXX.XXX"

# リストと比較して信頼していないIPからのアクセスならSlackに通知
for HOST in $TRUST_IP_LIST
do
  if [ $HOST == $SOURCE_IP ]; then
    exit 0
  fi
done

url="{{ slack_login_alert_webhook_url }}"

readonly USER=`whoami`
readonly HOST=`hostname`

ip=`who | awk '{print $6}' | cut -d '(' -f 2 | sed -e 's/)//g'`
user=`w -hsi | awk '{print $1}'`
day=`lastlog | grep -w "${USER}" | awk '{print $4}'`
month=`lastlog | grep -w "${USER}" | awk '{print $5}'`
date=`lastlog | grep -w "${USER}" | awk '{print $6}'`
time=`lastlog | grep -w "${USER}" | awk '{print $7}'`

payload="payload={
  \"attachments\": [
    {
      \"color\": \"#36a64f\",
            \"title\": \"'${USER}': SSH Connection has established.\",
      \"fallback\": \"'${USER}': SSH Connection has established.\",
      \"fields\": [
        {
          \"title\": \"HOSTNAME\",
          \"value\": \"${HOST}\",
          \"short\": true
        },
        {
          \"title\": \"Date / Time\",
          \"value\": \"${month} ${date} (${day})  ${time}\",
          \"short\": true
        },
                {
                  \"title\": \"User Name\",
                  \"value\": \"${user}\",
                  \"short\": true
                },
        {
          \"title\": \"from\",
          \"value\": \"${ip}\",
          \"short\": true
        }
      ]
    }
  ]
}"

curl -m 5 --data-urlencode "${payload}" "${url}" > /dev/null 2>&1