zoukankan      html  css  js  c++  java
  • 使用 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 最后的注释应为工作人员的姓名拼音

  • 相关阅读:
    查询已存入数据库中的图片,并显示出来
    图像插值的缺点
    windows网络服务之配置网络负载均衡(NLB)群集
    QR 码的位置检测符
    二维条码识别系统设计原理
    教你看懂Code128条形码
    DataMatrix二维条码源码分析检测识别图像位置
    C#条形码生成(五)----Web下的测试
    C# 生产成条形码3种方法
    屏蔽弹出对话框
  • 原文地址:https://www.cnblogs.com/wglee/p/7754956.html
Copyright © 2011-2022 走看看