线上服务器一般都是配置 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. java判断集合list是为空

    if(null == list || list.size() ==0 ){ } list.isEmpty()和list.size()==0 没有区别 isEmpty()判断有没有元素而size()返回 ...

  2. mysql分库分表(一)

    mysql分库分表 参考: https://blog.csdn.net/xlgen157387/article/details/53976153 https://blog.csdn.net/cleve ...

  3. 近年现场比赛补题(From 2013 to 2018)[持续更新]

    2013年 Noip提高组 Day1 Day2 2014年 Noip提高组 Day1 Day2 2015年 2016年 2017年 2018年

  4. ASCII_02_扩展

    1.来自“http://www.360doc.com/content/10/1007/22/3775569_59187136.shtml” 2. 3. 4. 5.

  5. scala学习手记19 - Option类型

    看到Option类型就知道这本教材应该要说那个了. 使用过guava后,应该知道guava中的Optional类的作用是什么.算了找下原始文档好了: Optional<T> is a wa ...

  6. BZOJ 1835 [ZJOI2010]base 基站选址:线段树优化dp

    传送门 题意 有 $ n $ 个村庄在一排直线上,现在要建造不超过 $ K $ 个通讯基站,基站只能造在村庄处. 第 $ i $ 个村庄距离第 $ 1 $ 个村庄的距离为 $ D_i $ .在此建造基 ...

  7. 第11章:最长公共子序列(LCS:Longest Common Subsequence)

    方法:动态规划 <算法导论>P208 最优子结构 + 重叠子问题 设xi,yi,为前i个数(前缀) 设c[i,j]为xi,yi的LCS的长度 c[i,j] = 0 (i ==0 || j ...

  8. idea maven打包 install 报错The packaging for this project did not assign a file to the build artifact

    如题,这其实是个低级错误,这个错的意思是,找不到这个插件的包. 原因很简单,不是找不到这个打包插件,而是自己的项目没有从maven仓库里加载这个包到项目里,因此会找不到. 看一下问什么会报这个错: 大 ...

  9. 卡尔曼滤波——基本假设(1)线性系统(2)高斯分布 根据x(t) 求解x(t+1)

    from:https://blog.csdn.net/u010720661/article/details/63253509 原文链接:http://www.bzarg.com/p/how-a-kal ...

  10. UI-隐藏键盘

    键盘的出现于隐藏(代码实现)================================= 1.通知案例: #import "ViewController.h" #import ...