日期:2014-05-16  浏览次数:20666 次

Linux下记录SSH操作日志
使用ssh登录管理主机时,为了方便后续查看操作日志,可将ssh操作时的命令及输出保存到指定的日志文件中。

SSH登录主机时可采用如下命令:
  ssh username@server | tee -a logfile.txt

其中tee命令读取标准输入,把这些内容同时输出到标准输出和(多个)文件中。

如果每次SSH时都这样操作有些繁琐,并且没准哪次就忘了追加记录日志功能。使用如下步骤让本机的ssh程序自动添加日志功能:

1、首先创建存放日志的文件夹并开放读写权限
$ mkdir ~/ssh_logs/
$ sudo chmod -R 777 ~/ssh_logs/

2、将原有ssh程序修改为另外一个名字,然后创建一个执行脚本,脚本中调用原来的ssh程序,只是在调用的时候添加了之前说的tee命令
$ sudo mv /usr/bin/ssh /usr/bin/ssh_ori
$ sudo vi /usr/bin/ssh
新建ssh文件内容如下:  
---------------------------------
#! /bin/sh

mkdir -p ~/ssh_logs

IP=$(echo $1 | grep -oP "((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))")
LOGNAME=${IP}_$(date +"%Y%m%d_%T")
ssh_ori $@ | tee -a ~/ssh_logs/${LOGNAME}.log
---------------------------------
脚本中首先利用正则表达式将访问IP提取出来,然后根据IP和当前时间戳决定日志文件名称,最后调用原有ssh程序(添加tee命令功能)

3、添加执行权限
$ sudo chmod a+x /usr/bin/ssh


    后续使用ssh登录主机进行操作时会将操作及输出写入到对应的日志文件中,日志文件格式为【访问IP_8位日期_时分秒.log】举例:
每次执行【ssh 192.168.1.100 -l user1】 或者 【ssh user1@192.168.1.100】时(不支持使用主机名)会根据当前时间及访问IP生成一个新的日志文件:【192.168.1.100_20130726_17:36:18.log】,文件中保存了此次ssh会话的所有操作及输出,便于后续问题排查。