如何保留我在其中使用的所有远程命令的本地时间戳记ssh
(命令行openssh客户端始于bash
)?
要求:
必要:
- 100%客户端,无需依赖服务器日志
- 为每个用户配置或安装的日志存储在用户的主目录中。
- 支持区分与多个用户和主机的多个同时会话。
- 非侵入性(无需每次都激活它,并且不会严重干扰使用ssh)
高优先级:
- 没有记录输出或尽可能过滤掉
- 密码条目未记录或文件已加密
- 指示实际使用的命令(在完成制表符/历史记录,退格键,CTRL+ C等之后的操作)
很高兴有:
- 还记录链接会话中的命令(在远程
ssh
或su <user>
会话期间输入的命令) - 会话的开始和结束应被记录
- 一个
bash
基于简单的,非root用户的解决方案将是最好的(也许是该命令的alias
或bash
包装脚本ssh
?)
- 还记录链接会话中的命令(在远程
我的技能水平:
- 我对编程并不陌生,但仍在学习
bash
和学习“ Linux方式”,因此,对带有简短说明的代码示例将不胜感激。
可能的策略
- 键盘记录程序 -问题:记录密码,不记录选项卡/历史记录完成(请参阅glenn的回答)
screen
每秒进行一次回滚转储,并diff
在它们之间找到新的回滚行 -问题:如何以一种有用的自动化方式实现这一点?ssh "$@" | tee >(some_cleaner_function >> $logfile)
-问题:无法在链接的会话中处理多行命令或历史记录,需要仔细清理(请参阅我的答案)- 以上一些的组合
一个例子
以下SSH会话:
user@local:~$ ssh user@remote
Last login: Tue Jun 17 16:34:23 2014 from local
user@remote:~$ cd test
user@remote:~/test$ ls
a b
user@remote:~/test$ exit
可能导致出现以下日志~/logs/ssh.log
:
2014-06-17 16:34:50 [user@remote - start]
2014-06-17 16:34:51 [user@remote] cd test
2014-06-17 16:34:52 [user@remote] ls
2014-06-17 16:34:53 [user@remote] exit
2014-06-17 16:34:53 [user@remote - end]
或者,也许会为每个会话创建一个单独的日志,并使用用于在文件顶部启动会话的命令行。