log.sh
1 |
if [ "$USER" = "root" ] && [ -z "$SSH_USER" ] && [ ! -z "$SSH_CLIENT" ] && [ -r /var/log/rsyslog/local/sshd/sshd.info.log ]; then |
---|---|
2 |
# retrieve key name from current user (usefull with Zephir, everybody use root user) |
3 |
IP=$(echo $SSH_CLIENT| cut -d' ' -f 1) |
4 |
PORT=$(echo $SSH_CLIENT| cut -d' ' -f 2) |
5 |
CONN=$(grep "Accepted publickey for root from $IP port $PORT ssh2: " /var/log/rsyslog/local/sshd/sshd.info.log | tail -n 1) |
6 |
KEY=$(echo $CONN | awk -F': ' '{ print $3 }') |
7 |
KEY_TYPE=$(echo $KEY | cut -d' ' -f 1) |
8 |
KEY_VAL=$(echo $KEY | cut -d' ' -f 2) |
9 |
if [ ! -z "$KEY_VAL" ]; then |
10 |
SSH_USER_TMP=$(ssh-keygen -lf /root/.ssh/authorized_keys | grep "$KEY_VAL" | grep " ($KEY_TYPE)"$ | tail -n 1 | cut -d' ' -f 3) |
11 |
if [ ! -z "$SSH_USER_TMP" ]; then |
12 |
SSH_USER=$SSH_USER_TMP |
13 |
export SSH_USER |
14 |
readonly SSH_USER |
15 |
fi |
16 |
fi |
17 |
fi |
18 |
|
19 |
trap_cmd_var() { |
20 |
if [ ! "${BASH_EXECUTION_STRING}-" = "-" ] && [ "${BASH_ARGV[@]}-" = "-" ]; then |
21 |
CMD=${BASH_EXECUTION_STRING} |
22 |
fi |
23 |
logcommand "$CMD" |
24 |
} |
25 |
|
26 |
trap_cmd_history() { |
27 |
CMD=$(fc -ln -1|sed -e "s/^[ \t]*//g") |
28 |
logcommand "$CMD" |
29 |
} |
30 |
|
31 |
logcommand() { |
32 |
R_CMD=$1 |
33 |
[ -z "$R_CMD" ] && return |
34 |
R_TTY=$(tty) |
35 |
R_USER=$USER |
36 |
if [ ! -z "$SUDO_USER" ]; then |
37 |
R_REMOTE_USER=$SUDO_USER |
38 |
elif [ ! -z "$SSH_USER" ]; then |
39 |
R_REMOTE_USER=$SSH_USER |
40 |
else |
41 |
R_REMOTE_USER=$USER |
42 |
fi |
43 |
R_SSH_CLIENT=$SSH_CLIENT |
44 |
R_HISTORY=$SCREEN_HISTORY |
45 |
R_PPID="$$" |
46 |
R_PWD=$PWD |
47 |
/usr/bin/logger -t history "\"$R_USER\" \"$R_REMOTE_USER\" \"$R_SSH_CLIENT\" \"$R_HISTORY\" \"$R_TTY\" \"$R_PPID\" \"$R_PWD\" \"$R_CMD\"" |
48 |
} |
49 |
if [ -z "$PS1" ]; then |
50 |
trap 'trap_cmd_var' DEBUG |
51 |
else |
52 |
trap 'trap_cmd_history' DEBUG |
53 |
fi |