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 最后的注释应为工作人员的姓名拼音

  • 相关阅读:
    Shell变量之自定义变量、环境变量
    Shell变量命名规则
    获取文件编码格式
    基于Lucene的文件检索Demo
    数据库压力测试工具
    插入ts以及判断列是否存在(支持多数据库)
    (摘)Chart属性设置
    (摘)C#comboBox绑定数据
    (摘)ORACLE DBA的职责
    (摘)DataGuard物理standby管理
  • 原文地址:https://www.cnblogs.com/wglee/p/7754956.html
Copyright © 2011-2022 走看看