Linux中将执行过的命令记录到日志并发送到服务器的方法

工作中,需要把用户执行的每一个命令都记录下来,并发送到日志服务器的需求,为此我做了一个简单的解决方案。这个方案会在每个用户退出登录 时把用户所执行的每一个命令都发送给日志守护进程rsyslogd,你也可通过配置“/etc/rsyslog.conf”进一步将日志发送给日志服务器

第一种方法

代码如下:
# vi /etc/profile
#设置history格式
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| \
awk '{print $NF}'|sed -e 's/[()]//g'`] "
#记录shell执行的每一条命令
export PROMPT_COMMAND='\
if [ -z "$OLD_PWD" ];then
export OLD_PWD=$PWD;
fi;
if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
logger -t `whoami`_shell_cmd "[$OLD_PWD]$(history 1)";
fi ;
export LAST_CMD="$(history 1)";
export OLD_PWD=$PWD;'

第二种方法
第一步:全局设置(这是一次性设置,需要root用户权限)

代码如下:

# vi /etc/profile
#用户登录时执行此脚本
#设置history显示格式
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null\
| awk '{print $NF}'|sed -e 's/[()]//g'`] "
#登录时清空当前缓存 echo "" > .bash_history

第二步:不同用户分别设置

代码如下:

# source /etc/profile
# vi /home/user1/.bash_logout
#当用户退出登录时会执行此脚本
tmpfile="/tmp/`whoami`_history.tmp"
#把格式化的history记录到文件里
history > $tmpfile
#读取文件,一行一行把文件内容发送到给syslogd。
#不要试图用"history | logger"或"logger -f $tmpfile"来替代下面的代码,
#否则将只能记录前200行。
k=1
while read line; do
((k++))
logger -t `whoami`_shell_cmd "$line"
done < $tmpfile
rm -f $tmpfile

(如果还有其它用户需要监控,则重复第二步骤)
第三步:把日志发送给远程主机(可选)

代码如下:
# vi /etc/rsyslog.conf
#增加如下行,IP自己换,也可以用域名,@表示用UDP协议,@@表示用TCP协议
*.* @192.168.0.1

不足之处:
1. 不能实时记录命令并发送log
2. 要记录终端桌面下的命令需要重启。
=========

时间: 2024-10-26 03:11:26

Linux中将执行过的命令记录到日志并发送到服务器的方法的相关文章

如何让linux连续执行几个命令,出错进停止?

如何让linux连续执行几个命令,出错进停止? 我们可以通过&&连接符来实现: command1 && command2 && command3 示例: [root@localhost usr]# ls && pwdbin&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; etc  games  include  lib  libexec  local 

linux定时执行任务crontab命令使用详解

在vps中很常见的一个用法就是定时执行任务,定时执行任务可以减少人为工作量,提高效率.linux系统的定时任务是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另外, 由于使用者自己也可以设置计划任务,所以,Linux系统也提供了使用者控制计划任务的命令:crontab 命令. linux定时执行任务简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务

在注销Linux时如何自动删除命令记录

为了系统安全,我们在http://www.aliyun.com/zixun/aggregation/13744.html">管理服务器之后,进行注销操作的同时也希望能自动的删除命令记录,那么我们应该如何做呢? 我们可以通过编辑/etc/skel/.bash_logout文件来实现 示例: [root@localhost sunco]# vi /etc/skel/.bash_logout # ~/.bash_logout 增加如下行: rm -f $HOME/.bash_history 这样

Linux中如何限制Shell命令记录的数量

默认情况下,bash会在文件$HOME/.bash_history中存放多达500条命令记录.有时根据具体的系统不同,默认记录条数不同.系统中每个用户的主目录下都有一个这样的文件. 示例如下: [root@localhost ithov]# ls -la 总用量&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;164  drwx------. 28 ithov ithov 4096 6月  18 16:18 .  d

利用xcopy命令实现本地文件复制到远程服务器的方法_DOS/BAT

A.net use \\IP地址 密码/user:****** B.xcopy 文件 \\IP地址\ 批处理文件为backup.bat,其代码如下: ========================================================================================= net use \\192.168.1.198\ipc$ Zqf198703 /user:royalpeak xcopy g:\backup\*.* \\192.168.

Linux下常用的shell命令记录

本文章记录我在linux系统下常用或有用的系统级命令,包括软硬件查看.修改命令,有CPU.内存.硬盘.网络.系统管理等命令.但本文不打算介绍生僻命令,也不介绍各个linux发行版下的特有命令,且以后会持续更新. 说明,我是在一个Centos 6.4 64位的虚拟机系统进行测试.本文介绍的命令都会在此Centos下运行验证(也有部分命令会在我的suse/ubuntu系统里测试的,会做特明说明),但运行结果就不再列出了. 硬件篇 CPU相关 lscpu                   #查看的是

Linux下通过script 命令记录(数据库)操作步骤

对DBA而言,经常碰到升级数据库或是apply patch,以及有些时候需要运行大量的脚本.对于这些操作我们希望现在在屏幕同时又输出的文件以备后续查询过程中曾经丢失的步骤或错误.Linux下的script命令就是解决这个问题的好帮手   1.script命令描述   复制代码 代码如下: script命令会记录所有的操作到文件同时在屏幕上输出,直到终止登陆的会话,或使用CRTL+D,或使用exit退出则停止记录. 这个命令对于数据库的升级或是重要设置的情形下使用可以用于后续查询操作成功或失败.

Linux script 命令记录(数据库)操作步骤

    对DBA而言,经常碰到升级数据库或是apply patch,以及有些时候需要运行大量的脚本.对于这些操作我们希望现在在屏幕同时又输出的文件以备后续查询过程中曾经丢失的步骤或错误.Linux下的script命令就是解决这个问题的好帮手.   1.script命令描述 script命令会记录所有的操作到文件同时在屏幕上输出,直到终止登陆的会话,或使用CRTL+D,或使用exit退出则停止记录. 这个命令对于数据库的升级或是重要设置的情形下使用可以用于后续查询操作成功或失败. 用法: $ sc

linux下执行shell命令方法简介_linux shell

linux下执行shell命令有两种方法  在当前shell中执行shell命令 在当前shell中产生一个subshell,在subshell中执行shell命令  1.在当前shell中执行shell命令 主要就是在命令行中通过交互方式方式直接输入shell命令,命令行直接执行给出结果.比如这样: 2.在当前shell中产生一个subshell,在subshell中执行shell命令 比如我们把shell写成shell脚本的方式来运行,这个时候会先启动一个subshell来代替当前的shel