ssh接続時に出力されるログイン履歴は最終(現在)しか表示されない。
Last login: Mon Sep 16 10:19:05 2024 from 192.168.x.xx
これの幅を増やしたいなと思ったので、ログイン履歴をlogファイルに書き込み、そこから読み込むようにした
# ログファイルのパス
LOGFILE="$HOME/.ssh/.log/all_sshauthlog.log"
# ログディレクトリが存在しない場合は作成
if [ ! -d "$HOME/.ssh/.log" ]; then
mkdir -p "$HOME/.ssh/.log"
fi
# ログファイルにSSH認証の成功・失敗の履歴を記録
sudo journalctl -u ssh | grep -E "Accepted|Failed password" >> "$LOGFILE"
# カラーコードの設定
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # 色リセット
# ログイン履歴の最後の3回をフォーマットして表示
echo -e "最後の3回のログイン履歴:\n"
tail -n 3 "$LOGFILE" | while read line; do
# 日付を抽出
DATE=$(echo "$line" | awk '{print $1, $2, $3}')
# 成功か失敗かを判定
if echo "$line" | grep -q "Accepted"; then
STATUS="${GREEN}Accepted${NC}"
else
STATUS="${RED}Failed${NC}"
fi
# IPアドレスを抽出
IP=$(echo "$line" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}')
# 結果を表示
echo -e "${YELLOW}$DATE${NC}"
echo -e " Status: $STATUS"
echo -e " IP Address: ${YELLOW}$IP${NC}\n"
done
これだけだと接続時に実行されないので
.bashrcから上記のスクリプトを呼び出すようにする。
chmod +x sshAuth.sh
vi .bashrc
.bashrc
~/.ssh/sshAuth.sh
結果
Sep 16 10:19:04
Status: Accepted
IP Address: 192.168.3.34
Sep 16 10:25:43
Status: Accepted
IP Address: 192.168.3.34
Sep 16 10:29:20
Status: Accepted
IP Address: 192.168.3.34