我有一个 Ubuntu 服务器,我想记录我的服务器上的所有 SSH 活动。
为此,我在这里找到了一份很好的文档:如何记录服务器上所有用户的所有 Bash 命令?我按照此文档并在服务器上启用了日志记录。我使用以下行记录命令:
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"
它提供了我的服务器上所有执行命令的日志(本地执行和 SSHed)。我已附上相同的输出。
我需要的是,在日志文件中应该有用于连接到我的本地服务器的用户的用户名或主机名和公共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
答案1
变量 $SSH_CONNECTION 为您提供用户连接使用的端口和源/目标 IP 地址。因此,将其作为参数添加到记录器命令中。
如:
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 名称。