线上服务器一般都是配置 key 登录,一个账号可以多个工作人员连接,操作命令历史却全部记录在一个文件中,当然后查看某条命令是谁执行的时候就不好查了。这时候我们就可以通过配置 histroy 相关环境变量将不同工作人员操作历史分别记录到不同的文件中。具体脚本如下

# 通过登录的 key 分开记录命令历史
# 使用方法:
# 1. 禁用 openssh 密码登录验证
# 2. 设置 openssh 日志级别为 VERBOSE
# 3. 重启 openssh 服务
# 注意:
# 仅适用于 Centos 6.x
# 日期: 2018-03-21
# 作者: liwanggui hist() {
login_ip='127.0.0.1'
login_name=$USER
} hist_net() {
login_ip=$(echo $SSH_CLIENT | awk '{print $1}')
local login_port=$(echo $SSH_CLIENT | awk '{print $2}')
local filter_arg1="Connection from ${login_ip} port ${login_port}"
local filter_arg2="Found matching RSA key"
local ssh_logfile="/var/log/secure"
local authorized_keys="${HOME}/.ssh/authorized_keys" local start_line=$(grep -n "${filter_arg1}" "${ssh_logfile}" | awk -F':' '{print $1}')
local key_md5=$(sed -n "${start_line},$"p "${ssh_logfile}" | grep "${filter_arg2}" | head -n 1 | awk '{print $NF}') local tmpdir=$(mktemp -d)
while read line; do
comment=$(echo $line | awk '{print $NF}')
echo $line > ${tmpdir}/$comment
done < ${authorized_keys} cd $tmpdir
for name in $(ls); do
md5=$(/usr/bin/ssh-keygen -lf $name | awk '{print $2}')
if [ $key_md5 = $md5 ]; then
login_name=$name
break
fi
done
cd ; /bin/rm -rf $tmpdir
} # 判断登录方式 if [ "${SSH_CLIENT}x" = 'x' ]; then
hist
else
hist_net
fi if [ ! -d /var/log/history ]; then
/bin/mkdir -p /var/log/history
/bin/chmod 777 /var/log/history
fi if [ ! -f /var/log/history ];then
touch /var/log/history/$login_name
chmod 600 /var/log/history/$login_name
fi export HISTFILESIZE=4096
export HISTSIZE=2000
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [${login_ip}:${login_name}] "
export HISTFILE="/var/log/history/$login_name"
export PROMPT_COMMAND="history -a; history -w; history -c; history -r" unset login_ip
unset login_name
unset hist
unset hist_net

注意: key 最后的注释应为工作人员的姓名拼音

使用 key 登录时分开记录操作历史记录的更多相关文章

  1. Tomcat会话超时时怎样记录操作日志,满足安全审计要求

    众所周知.在实际的Web应用程序中,会话管理一般都採用Web容器会话管理功能. 使用Tomcat做Webserver也是如此,并且从安全的角度考虑,尽量避免去更改和干预Web容器的会话管理功能. To ...

  2. Linux下查看/管理当前登录用户及用户操作历史记录

    转载自: http://www.cnblogs.com/gaojun/archive/2013/10/24/3385885.html 一.查看及管理当前登录用户 1.使用w命令查看登录用户正在使用的进 ...

  3. linux ssh 使用深度解析(key登录详解)

    SSH全称Secure SHell,顾名思义就是非常安全的shell的意思,SSH协议是IETF(Internet Engineering Task Force)的Network Working Gr ...

  4. 设置 SSH Key 登录服务器和 Git 服务器

    设置 SSH Key 登录服务器 通过 ssh 登录服务器,一直都是用的账号和密码,今天看到一篇文章说这样不安全,使用 ssh key 的方式登录则是更好的选择,因此,研究实践了一下,并记录在这里. ...

  5. web进阶之jQuery操作DOM元素&&MySQL记录操作&&PHP面向对象学习笔记

    hi 保持学习数量和质量 1.jQuery操作DOM元素 ----使用attr()方法控制元素的属性 attr()方法的作用是设置或者返回元素的属性,其中attr(属性名)格式是获取元素属性名的值,a ...

  6. MVC 记录操作日志与过滤特殊字符

    最近进行的MVC系统需要用到记录操作日志和过滤特殊字符的功能,如果每个action中都调用记录日志的方法就太麻烦了,所以根据需要结合mvc的过滤机制 写了个特殊字符验证与记录操作日志的公用类: pub ...

  7. 利用xshell密钥管理服务器远程登录+VIM dd命令操作之伤之再伤

    1.打开Xshell界面,中文界面方便操作,菜单栏:工具——新建用户密钥生成向导 2.密钥类型选择RSA,密钥长度选择2048位,单击下一步继续: 3.很快生成公钥对,单击下一步继续: 4.密钥名称可 ...

  8. 巧用*_his表记录操作历史

    文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 许多OLTP应用的开发者都知道,一些重要的操作要记录操作历史,把操作前的数据备份到历史表,然后再执行相应的修改操作.这样可以获取某个 ...

  9. Major compaction时的scan操作

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u014393917/article/details/24419355 Major compactio ...

随机推荐

  1. ResulsetHandler九个实现类

    ResulsetHandler九个实现类 ArrayHandler, 将结果集中第一条记录封装到Object[],数组中的每一个元素就是记录中的字段值. ArrayListHandler, 将结果集中 ...

  2. Linux.Siggen.180

    from: https://vms.drweb.com/virus/?i=15455134&lng=en Linux.Siggen.180 Added to Dr.Web virus data ...

  3. java-二维数组——with 刘童格

    #include<iostream> #include<string> using namespace std; void MaxIntArray(int a[],int &a ...

  4. c 结构体中存在指针,指针的不同赋值方法

    #include<stdio.h>#include<stdlib.h>#include<string.h>struct parameter{ char *fd; i ...

  5. yii2输出sql

    yii2如何输出sql语句? 单表查询sql: 我的model是:coupon,那么sql输出为: $a = coupon::find()->createCommand()->getRaw ...

  6. 交换机上的trunk,hybrid,access配置和应用(转)

    交换机上的trunk,hybrid,access配置和应用 以太网端口的链路类型: Access类型:端口只能属于一个vlan,一般用于连接计算机. Trunk类型:端口可以属于端个vlan,可以接收 ...

  7. MySQL忘记密码解决方案

    1.修改本地mysql目录中的my.ini文件 添加skip-grant-tables 2.在win +r 输入cmd,进行mysql的重启启动操作 net stop MySQL 停止服务      ...

  8. jquery attr与prop的区别与联系

    最近开发中发现用attr无法设置checkbox的选中事件,在网上找了下说要用prop,所以总结下两者的区别. 1.操作的对象不同 attr:操作的是HTML文档节点属性 prop:操作的是js对象属 ...

  9. vue-cli 脚手架项目简介(一) - package.json

    vue-cli是用来生成 vue项目的命令行工具,它的使用方法是这样的: vue init <template-name> <project-name>第二个参数 templa ...

  10. Neutron的防火墙原理

    确切的说这是fwaas,即防火墙即是服务. 防火墙与安全组区别防火墙一般放在网关上,用来隔离子网之间的访问.因此,防火墙即服务也是在网络节点上(具体说来是在路由器命名空间中)来实现. 安全组的对象是虚 ...