工作中,需要把用户执行的每一个命令都记录下来,并发送到日志服务器的需求,为此我做了一个简单的解决方案。这个方案会在每个用户退出登录 时把用户所执行的每一个命令都发送给日志守护进程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. 要记录终端桌面下的命令需要重启。

=========

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

  1. 宝塔面板使用WWW用户执行计划任务命令 解决laravel日志权限问题 宝塔设置计划任务执行用户

    宝塔面板使用WWW用户执行计划任务命令 解决laravel日志权限问题 宝塔设置计划任务执行用户 问题背景 宝塔面板的计划任务默认执行用户是root,如果任务里有打印日志的操作,则自动创建的log文件 ...

  2. linux定向查日志_Linux之screen创建、切换、记录屏幕日志

    由于screen的命令太多.太强大,这里扼要的写下screen的创建.切换.恢复会话和窗口缓存log重定向的使用! * 这里假定已经安装好了screen,版本号为:Screen version 4.0 ...

  3. linux数据库能看到系统执行了哪些命令,DB2数据库在linux操作系统的指令有哪些?...

    以下的文章主要描述的是DB2数据库在linux操作系统下的相关指令,你如果对DB2数据库在linux操作系统下的相关指令有兴趣的话你就可以点击以下的文章进行观看了,以下就是文章的详细内容介绍,望大家借 ...

  4. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter16-脚本控制

    十六.脚本控制 Linux 利用信号与系统中的进程进行通信. 重温 Linux 信号 Linux 系统和应用程序可以产生超过 30 个信号.在 shell 脚本编程时会遇到的最常见的 Linux 系统 ...

  5. 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux 内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 )

    文章目录 一.打开 Linux 内核编译 菜单配置 二.菜单配置中的光标移动与选中状态 三.保存配置 四.配置项帮助文档 一.打开 Linux 内核编译 菜单配置 执行 make menuconfig ...

  6. linux shell express,Linux下使Shell 命令脱离终端在后台运行

    在Linux下,如果你要执行的shell命令耗时特别长,并且:(1)你的网络不稳定,随时可能断网:或者(2)你在执行了shell命令之后必须要关闭终端软件(例如SecureCRT).你是否遇到过这样的 ...

  7. virtualbox 安装kali linux虚拟机,kali Linux安装virtualbox虚拟机之爬坑经历

    原标题:kali Linux安装virtualbox虚拟机之爬坑经历 很多kali爱好者想把kali linux作为系统使用,但是有些win下的程序有时候也需要用到,此时需要虚拟机. kali系统在安 ...

  8. ELK日志系统之使用Rsyslog快速方便的收集Nginx日志

    常规的日志收集方案中Client端都需要额外安装一个Agent来收集日志,例如logstash.filebeat等,额外的程序也就意味着环境的复杂,资源的占用,有没有一种方式是不需要额外安装程序就能实 ...

  9. Redis 笔记(08)— 事务(一次执行多条命令、命令 watch/multi/exec/discard、错误处理)

    1. 事务概念 Redis 中的事务 (transaction)是一组命令的集合.事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的 ...

最新文章

  1. Acronis移动方案(四)
  2. 关于git的使用记录总结
  3. go mysql教学_Go语言之对Mysql简单操作
  4. 《The C++ Standard Library》第50页 关于传递auto_ptr的问题
  5. VS Code 中的文件添加图标的插件vscode-icons
  6. 【飞秋】网络的基础-域名篇
  7. Mongodb最基础入门教程
  8. tensorflow2.0 图像处理项目_航天泰坦丨国产自主遥感图像处理软件当自强
  9. 【Java基础】3、Java 位运算(移位、位与、或、异或、非)
  10. A MULTI-TASK FRAMEWORK WITH FEATURE PASSING MODULE FOR SKIN LESION CLASSIFICATION AND SEGMENTATION
  11. paip.验证码识别---初始化
  12. ug链轮设计软件_教你怎么用UG做链轮教程【UG爱好者首发】
  13. 音乐文件加密歌曲转换器mp3
  14. 解决: 在路径为[/StudentManagerWeb]的上下文中,servlet[LoginServlet]的Servlet.service()引发异常 java.lang.NullPointe
  15. linux查询打印机ip,Linux C打印IP地址信息
  16. OpenVINO整活(一) 输入分辨率
  17. 使用Neo4j+InteractiveGraph实现豆瓣电影知识图谱可视化
  18. MLlib 二分类问题
  19. pear php5.6,一键安装php5.6.40脚本
  20. object-c 基础动画的学习总结

热门文章

  1. c标准基本库函数:libc、glibc的关系
  2. python 2022/1/2
  3. 【PC工具】更新文件夹多文件群体比较工具WinMerge
  4. 【WSN同步捕获】无线传感器网络的同步捕获和跟踪误差的MATLAB仿真
  5. 求带便函数权值的最短路径
  6. C++虚成员函数表vtable
  7. Http 面试知识点
  8. [Oracle] CPU/PSU补丁安装详细教程
  9. 控件联动(三级联动)
  10. 小猪笔记本电脑装linux时需要以下命令