Linux

如何使用使用者的主機名或使用者名記錄伺服器上的所有 SSH 活動?

  • September 26, 2020

我有一個 Ubuntu 伺服器,我想在我的伺服器上記錄所有 SSH 活動。

為此,我在這裡找到了一個很好的文件:如何記錄伺服器上所有使用者的所有 Bash 命令?我按照此文件啟用了伺服器上的日誌記錄。我使用以下行記錄命令:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"

它給出了我伺服器上所有執行命令的日誌(本地執行和 SSH)。我附上了相同的輸出。

我需要的是,在日誌文件中應該有一個使用者名或用於連接到我的本地伺服器的使用者的主機名和公共 IP 地址。

有人對此有任何想法嗎?

輸出日誌文件:

Aug 7 11:03:34 local ajay: ajay [1906]: sudo rm -rf commands.log*
Aug 7 11:03:36 local ajay: ajay [1906]: ll
Aug 7 11:03:59 local ajay: ajay [1906]: sudo rm -rf messages*
Aug 7 11:04:19 local ajay: ajay [1906]: sudo rm -rf usercommands
Aug 7 11:04:49 local ajay: ajay [1906]: sudo rm -rf history.log
Aug 7 11:05:11 local ajay: ajay [1906]: ll
Aug 7 11:05:21 local ajay: ajay [1906]: cat commands.log
Aug 7 11:05:33 local ajay: ajay [1906]: cat commands.log
Aug 7 11:05:46 local ajay: ajay [1906]: sudo chmod -R 777 commands.log
Aug 7 11:05:48 local ajay: ajay [1906]: cat commands.log
Aug 7 11:06:19 local ajay: ajay [1906]: cat commands.log

變數 $SSH_CONNECTION 為您提供使用者連接使用的埠和源/目標 IP 地址。因此,將其作為參數添加到您的 logger 命令中。

如:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$SSH_CONNECTION $(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"

有關更多詳細資訊,請查看什麼是 SSH_TTY 和 SSH_CONNECTION?

至於主機名,這取決於 DNS 解析。您始終可以編寫腳本來解決日誌的反向 DNS。我知道沒有直接解決 DNS 名稱的指令。

引用自:https://unix.stackexchange.com/questions/461708