Skip to content

Commit a5badbf

Browse files
committed
Added source files
1 parent 6e416d6 commit a5badbf

File tree

6 files changed

+119
-0
lines changed

6 files changed

+119
-0
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
config
2+
*.log

README.md

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Shelltracer
2+
Small sh script collection for SSH User Login notifications over [pushover.net](https://pushover.net/).
3+
Can also be used for other notifications, like OS startups, letsencrypt renewal, ...! Only limited by you imagination!
4+
5+
## Installation
6+
Download the repo files, copy "config.sample" to "config" and adjust it.
7+
Then add following line to your /etc/pam.d/sshd file:
8+
```
9+
session optional pam_exec.so /root/shelltracer/exec.sh
10+
```
11+

config.sample

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/bin/sh
2+
3+
PUSHOVER_TOKEN_APP="your_pushover_app_token"
4+
PUSHOVER_TOKEN_USER="your_pushover_user_token"
5+
6+
TITLE="Shelltracer"
7+
8+
LOGFILE=/var/log/shelltracer/log-trace.log
9+
10+
# disables logout notifications if set to NO
11+
LOGOUT_NOTIFICATION="NO"
12+
13+
DATE=/bin/date
14+
JOT=/usr/bin/jot
15+
ID=/usr/bin/id
16+
CURL=/usr/local/bin/curl
17+
NOHUP=/usr/bin/nohup
18+
HOST=/usr/bin/host
19+
HOSTNAME=/bin/hostname
20+
W=/usr/bin/w
21+
AWK=/usr/bin/awk
22+

exec.sh

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/sh
2+
3+
SCRIPT_DIR=`dirname $0`
4+
5+
/usr/bin/nohup ${SCRIPT_DIR}/tracer.sh > ${SCRIPT_DIR}/log-error.log 2>&1 &

notify.sh

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/sh
2+
3+
SCRIPT_DIR=`dirname $0`
4+
. "${SCRIPT_DIR}/config"
5+
6+
PUSHOVER_TITLE="$1"
7+
PUSHOVER_MESSAGE="$2"
8+
PUSHOVER_URL="https://api.pushover.net/1/messages.json"
9+
10+
${CURL} -s -F "token=${PUSHOVER_TOKEN_APP}" -F "user=${PUSHOVER_TOKEN_USER}" -F "title=${PUSHOVER_TITLE}" -F "message=${PUSHOVER_MESSAGE}" ${PUSHOVER_URL} >> ${LOGFILE} 2>&1
11+
echo >> ${LOGFILE}

tracer.sh

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#!/bin/sh
2+
3+
SCRIPT_DIR=`dirname $0`
4+
. "${SCRIPT_DIR}/config"
5+
6+
NOW_UNIX=`${DATE} +%s`
7+
NOW_HUMAN=`${DATE} "+%F %H:%M:%S"`
8+
RAND=`${JOT} -r 1 1000`
9+
MACHINE=`hostname`
10+
11+
LOGFILE_TEMP="${LOGFILE}.${NOW_UNIX}.${RAND}"
12+
13+
14+
exit_program() {
15+
${W} >> $LOGFILE_TEMP
16+
echo $1 >> $LOGFILE_TEMP
17+
echo "==========================================================" >> $LOGFILE_TEMP
18+
cat $LOGFILE_TEMP >> $LOGFILE
19+
rm -f $LOGFILE_TEMP
20+
exit
21+
}
22+
23+
if [ ! -z "$PAM_USER" ]; then
24+
USER=$PAM_USER
25+
elif [ -z "$USER" ]; then
26+
USER="UKN"
27+
fi
28+
29+
if [ ! -z "$PAM_SERVICE" ]; then
30+
SERVICE="$PAM_SERVICE"
31+
else
32+
SERVICE="Manual"
33+
fi
34+
35+
if [ "${PAM_SM_FUNC}" == "pam_sm_open_session" ]; then
36+
ACTION="Login"
37+
elif [ "${PAM_SM_FUNC}" == "pam_sm_close_session" ]; then
38+
ACTION="Logout"
39+
elif [ ! -z "${PAM_SM_FUNC}" ]; then
40+
ACTION="${PAM_SM_FUNC}"
41+
else
42+
ACTION="TERM EXEC"
43+
fi
44+
45+
46+
echo "Service: ${SERVICE}" >> $LOGFILE_TEMP
47+
echo "Action: ${ACTION}" >> $LOGFILE_TEMP
48+
echo "Date: ${NOW_HUMAN}" >> $LOGFILE_TEMP
49+
echo "Server: ${MACHINE}" >> $LOGFILE_TEMP
50+
echo "User: ${USER}" >> $LOGFILE_TEMP
51+
52+
if [ ! -z "$PAM_RHOST" ]; then
53+
IP=`${HOST} -W5 -t A $PAM_RHOST | ${AWK} '{ print $4 }'`
54+
55+
echo "User Host: ${PAM_RHOST}" >> $LOGFILE_TEMP
56+
echo "User IP: $IP" >> $LOGFILE_TEMP
57+
fi
58+
59+
60+
if [ "${ACTION}" == "Logout" ] && [ "${LOGOUT_NOTIFICATION}" == "NO" ]; then
61+
exit_program "Logout END - skipping pushover notification"
62+
fi
63+
64+
PUSHOVER_TITLE=$TITLE
65+
PUSHOVER_MESSAGE=`cat $LOGFILE_TEMP`
66+
${SCRIPT_DIR}/notify.sh "${PUSHOVER_TITLE}" "${PUSHOVER_MESSAGE}"
67+
68+
exit_program "${ACTION} END"

0 commit comments

Comments
 (0)