在终端上记录操作
Record actions on a terminal
我想记录用户在终端上执行的操作。这包括当用户可以通过 ssh 连接到远程主机时可以执行的操作。这意味着如果用户运行
ssh user@192.168.1.1
user@192.168.1.1's password:
ls -ltr
f1 f2 f3
#record all the above
在远程机器上通过 ssh,它应该记录命令和输出。
我已经为它编写了一个 bash 脚本并尝试了以下
while IFS="" read -e -d $'\n' -p "$USER@$HOSTNAME:$PWD$ " cmd; do
这将输入捕获到 cmd,但如何触发命令并记录输出仍然是个谜。
如果有更好的方法,我愿意接受任何其他语言。
如果有办法 select 记录下来的内容也会很棒。例如:
$ls
file1 file2 file3 folder1
#record
$cat file1
Lorem ipsum dolor sit amet, consectetur adipiscing elit
#do not record
首先,我假设 "actions that a user performs on a terminal" 你指的是键盘输入。然后,这与您还想捕获的输出相匹配。这不包括例如当用户运行 rm
!
时删除文件
现在,您的问题中出现了误解。终端仅提供输入(从键盘)和输出(到显示器)。输入(除了它自己解释的东西)然后被转发到一个程序,通常是 shell 比如zsh
或 fish
,同时该程序的输出被转发到显示器。这通过三个标准流 stdin
、stdout
和 stderr
发生。您基本上需要的是一个位于终端和 shell 之间的程序。该程序在终端和 shell 之间编组数据,同时将该数据(或至少是输出)记录到一个文件中。这是例如script
做什么。
请注意,您对记录 SSH 会话的要求也已满足。在正常的 SSH 会话中,带有两个元素(终端,shell)的上述链通过 SSH 客户端进行扩展,并通过相应的 SSH 服务器进程和另一个程序(通常是另一个 shell)进行远程扩展。当你在远程机器上执行 echo foo
时,那里的 shell 将它输出到 SSH 服务器进程,然后将它传递给 SSH 客户端,本地 shell 最后显示在终端上。输入到终端采用相反的路径。
我想记录用户在终端上执行的操作。这包括当用户可以通过 ssh 连接到远程主机时可以执行的操作。这意味着如果用户运行
ssh user@192.168.1.1
user@192.168.1.1's password:
ls -ltr
f1 f2 f3
#record all the above
在远程机器上通过 ssh,它应该记录命令和输出。 我已经为它编写了一个 bash 脚本并尝试了以下
while IFS="" read -e -d $'\n' -p "$USER@$HOSTNAME:$PWD$ " cmd; do
这将输入捕获到 cmd,但如何触发命令并记录输出仍然是个谜。
如果有更好的方法,我愿意接受任何其他语言。
如果有办法 select 记录下来的内容也会很棒。例如:
$ls
file1 file2 file3 folder1
#record
$cat file1
Lorem ipsum dolor sit amet, consectetur adipiscing elit
#do not record
首先,我假设 "actions that a user performs on a terminal" 你指的是键盘输入。然后,这与您还想捕获的输出相匹配。这不包括例如当用户运行 rm
!
现在,您的问题中出现了误解。终端仅提供输入(从键盘)和输出(到显示器)。输入(除了它自己解释的东西)然后被转发到一个程序,通常是 shell 比如zsh
或 fish
,同时该程序的输出被转发到显示器。这通过三个标准流 stdin
、stdout
和 stderr
发生。您基本上需要的是一个位于终端和 shell 之间的程序。该程序在终端和 shell 之间编组数据,同时将该数据(或至少是输出)记录到一个文件中。这是例如script
做什么。
请注意,您对记录 SSH 会话的要求也已满足。在正常的 SSH 会话中,带有两个元素(终端,shell)的上述链通过 SSH 客户端进行扩展,并通过相应的 SSH 服务器进程和另一个程序(通常是另一个 shell)进行远程扩展。当你在远程机器上执行 echo foo
时,那里的 shell 将它输出到 SSH 服务器进程,然后将它传递给 SSH 客户端,本地 shell 最后显示在终端上。输入到终端采用相反的路径。