国内のほとんどのクラウドサーバーには、ssh ログインのプロンプト機能が付属しています。この機能は便利だと思いますが、多くのカスタムシステムイメージを持たないクラウドサーバープロバイダーでは、リモートログインの通知機能がありません。そのため、Telegram にログイン情報をプッシュするためのスクリプトを作成しました。
ファイル名 00-ssh-login-alarm-telegram.sh
(実際にはカスタマイズ可能)を /etc/profile.d
ディレクトリに配置します。
#!/bin/bash
# Telegram botのトークンを入力してください
token=
# 自分のTelegramのIDを入力してください
id=
# VPSのIPアドレス
vpsip=$(curl -s ip.sb -4)
# ログイン時間
logintime=$(TZ=UTC-8 date '+%Y-%m-%d %H:%M:%S')
# リモートログインのIPアドレス
loginip=$(who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g')
# IPの所属するASN組織名
loginfrom=$(curl -s https://api.ip.sb/geoip/${loginip} | jq .asn_organization)
curl -s "https://api.telegram.org/bot${token}/sendMessage?chat_id=${id}" --data-binary "&text=NewLogin:%0AVPS: ${vpsip}%0ATime: ${logintime}%0ALogin from:%0A${loginip}%0A${loginfrom}" > /dev/null
このスクリプトでは、JSON の解析に jq
を使用しているため、パッケージマネージャーで事前にインストールする必要があります。
使用例:
NewLogin:
VPS: ***.***.***.***
Time: 2020-09-13 12:41:24
Login from:
***.***.***.***
"asn_organization"
このスクリプトは ip.sb の API を使用しています
2021-10-20 更新#
スクリプトはいくつかのバージョンで更新されており、現在のスクリプトでは以前に欠けていたいくつかの機能が実装されています。
- ログインユーザー名の表示
- ログインユーザーの TTY のブロックを解除
#!/bin/bash
# Telegram botのトークンを入力してください
token=
# 自分のTelegramのIDを入力してください
id=
localip=$(who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g')
echo 'localip=$(curl -s ip.sb -4)' > tg.sh
echo 'user=$(whoami)' >> tg.sh
echo 'logintime=$(TZ=UTC-8 date "+%Y-%m-%d %H:%M:%S")' >> tg.sh
echo 'loginip='${localip} >> tg.sh
echo 'loginfrom=$(curl -s https://api.ip.sb/geoip/${loginip} | jq -r .asn_organization)' >> tg.sh
echo 'curl -s "https://api.telegram.org/bot'${token}'/sendMessage?chat_id='${id}'" --data-binary "&text=NewLogin:%0AVPS:${user}@${localip}%0ATime: ${logintime}%0ALogin from:%0A${loginip}%0A${loginfrom}" > /dev/null && rm tg.sh' >> tg.sh
bash tg.sh &