ssh 命令 记录 log
当我们需要对SSH命令的执行过程进行记录时,可以通过配置SSH服务器和客户端的日志功能来实现。提供几种解决方案,帮助用户记录SSH命令日志,包括修改sshd_config文件、使用脚本记录以及通过中间代理记录等方法。
修改sshd_config配置文件
最直接的方法是通过修改SSH服务端的配置文件/etc/ssh/sshd_config
,启用详细的日志记录功能。具体步骤如下:
- 打开配置文件:
sudo nano /etc/ssh/sshd_config
- 修改或添加以下行:
LogLevel VERBOSE
- 重启SSH服务以应用更改:
sudo systemctl restart sshd
系统会将用户的登录信息、使用的公钥以及其他相关信息记录到系统的日志文件中(通常是/var/log/auth.log
)。如果需要记录更详细的信息,可以将LogLevel设置为DEBUG级别,但要注意这可能会产生大量的日志数据。
使用脚本记录命令
另一种方法是通过在用户登录后自动运行的脚本来记录每个用户执行的命令。这种方法需要编辑用户的.bashrc
或者.profile
文件,添加一个简单的日志记录脚本。
bash
export PROMPT_COMMAND='RETRN_VAL=$?;LOGGER "[${USER}] executed command [${BASH_COMMAND}] at [`date`] with return value [$RETRN_VAL]"'
这段代码会在每次命令执行后,自动将命令内容、执行时间和返回值记录到系统日志中。如果你希望将日志记录到特定文件而不是系统日志,可以替换LOGGER
为echo
并将输出重定向到一个文件。
通过中间代理记录
对于更加复杂的场景,比如需要对所有用户的命令进行集中管理,可以考虑使用SSH代理服务器。代理服务器可以在用户连接到目标服务器之前拦截并记录所有的SSH流量。
例如,可以使用sshuttle
或者编写自定义的SSH隧道脚本来实现这一目的。下面是一个简单的SSH隧道脚本示例:
bash</p>
<h1>!/bin/bash</h1>
<p>LOGFILE="/var/log/ssh_commands.log"
COMMAND="$@"
echo "$(date) - User: ${USER} - Command: ${COMMAND}" >> $LOGFILE
ssh $@
将这个脚本保存为logssh
并赋予可执行权限后,用户可以通过运行logssh user@host
来代替普通的ssh
命令。这样,所有的SSH命令都会被记录到指定的日志文件中。
来说,记录SSH命令的日志可以通过调整服务器配置、使用客户端脚本或设置中间代理等多种方式实现。每种方法都有其适用的场景和优缺点,用户可以根据自己的需求选择最合适的方式。