使用 key 登录时分开记录操作历史记录
线上服务器一般都是配置 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 登录时分开记录操作历史记录的更多相关文章
- Tomcat会话超时时怎样记录操作日志,满足安全审计要求
众所周知.在实际的Web应用程序中,会话管理一般都採用Web容器会话管理功能. 使用Tomcat做Webserver也是如此,并且从安全的角度考虑,尽量避免去更改和干预Web容器的会话管理功能. To ...
- Linux下查看/管理当前登录用户及用户操作历史记录
转载自: http://www.cnblogs.com/gaojun/archive/2013/10/24/3385885.html 一.查看及管理当前登录用户 1.使用w命令查看登录用户正在使用的进 ...
- linux ssh 使用深度解析(key登录详解)
SSH全称Secure SHell,顾名思义就是非常安全的shell的意思,SSH协议是IETF(Internet Engineering Task Force)的Network Working Gr ...
- 设置 SSH Key 登录服务器和 Git 服务器
设置 SSH Key 登录服务器 通过 ssh 登录服务器,一直都是用的账号和密码,今天看到一篇文章说这样不安全,使用 ssh key 的方式登录则是更好的选择,因此,研究实践了一下,并记录在这里. ...
- web进阶之jQuery操作DOM元素&&MySQL记录操作&&PHP面向对象学习笔记
hi 保持学习数量和质量 1.jQuery操作DOM元素 ----使用attr()方法控制元素的属性 attr()方法的作用是设置或者返回元素的属性,其中attr(属性名)格式是获取元素属性名的值,a ...
- MVC 记录操作日志与过滤特殊字符
最近进行的MVC系统需要用到记录操作日志和过滤特殊字符的功能,如果每个action中都调用记录日志的方法就太麻烦了,所以根据需要结合mvc的过滤机制 写了个特殊字符验证与记录操作日志的公用类: pub ...
- 利用xshell密钥管理服务器远程登录+VIM dd命令操作之伤之再伤
1.打开Xshell界面,中文界面方便操作,菜单栏:工具——新建用户密钥生成向导 2.密钥类型选择RSA,密钥长度选择2048位,单击下一步继续: 3.很快生成公钥对,单击下一步继续: 4.密钥名称可 ...
- 巧用*_his表记录操作历史
文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 许多OLTP应用的开发者都知道,一些重要的操作要记录操作历史,把操作前的数据备份到历史表,然后再执行相应的修改操作.这样可以获取某个 ...
- Major compaction时的scan操作
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u014393917/article/details/24419355 Major compactio ...
随机推荐
- spark 参数调优
调整partition数量,每次reduece和distict的时候都应该调整,数量太大和太小都不好,通常来讲保证一个partition的大小在1-2G左右为宜 调整excutors 调整core 调 ...
- java实现定时任务的三种方法 - 转载
java实现定时任务的三种方法 /** * 普通thread * 这是最常见的,创建一个thread,然后让它在while循环里一直运行着, * 通过sleep方法来达到定时任务的效果.这样可以快速简 ...
- Pandas数据结构
Pandas处理以下三个数据结构 - 系列(Series) 数据帧(DataFrame) 面板(Panel) 这些数据结构构建在Numpy数组之上,这意味着它们很快. 维数和描述 考虑这些数据结构的最 ...
- devstack环境中不能创建cinder volume
刚安装好的devstack环境中无法成功创建cinder volume,创建的volume的status为error:在cinder scheduler中看到失败log:2015-10-15 14:1 ...
- Dib to Bitmap doesn't work in WPF
一.Dib to Bitmap doesn't work in WPF 代码如下: protected byte[] BitmapFromDIB(IntPtr pDIB, IntPtr pPix) { ...
- python脚本4_求1到5阶乘之和
#求1到5阶乘之和 # a = 1 sum = 0 for i in range(1,6): a = i*a sum = sum+a print(sum)
- Python之paramiko
一.基础 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BSD, MacOS X ...
- 数据库oracle(PGA+SGA分配机制)
一.名词解释 (1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. ( ...
- opencv:基本图形绘制
可以使用opencv绘制 直线.圆.方形.椭圆等基本图形. 示例代码: #include <opencv.hpp> using namespace cv; int main() { // ...
- MySQL 5.6 二进制包安装配置多实例方法
MySQL支持一台机器上启动多个实例,如果你的机器性能很好的话,启动多个实例将最大化利用你的服务器硬件资源. MySQL多实例一般有两种配置方法: 1.官方推荐的mysqld_multi方式,多个实例 ...