在 ssh 中使用 bash 中的 history 命令并获取带有时间戳的输出

在 ssh 中使用 bash 中的 history 命令并获取带有时间戳的输出

基本上,我想获取在我的 ssh 服务器上执行的所有命令及其时间的记录。我尝试过的代码是:

ssh user@ip 'export HISTFILE=~/.bash_history; set -o history; history'

我收到了所有命令,但没有收到预期的时间戳。

当我第一次登录然后使用 history 命令时,我会获得所有详细信息,包括日期和时间。当我使用 history 命令和 ssh 时,我想获得所有详细信息。我该怎么做?哦,是的,如果可能的话,我想获得历史记录而不需要导出 HISTFILE。(如果可能的话) 安装软件包不是一个选项。

答案1

两件事情:

  1. 您还需要导出例如

    HISTTIMEFORMAT='%F %T '
    

    设置显示命令历史次数。

  2. 如果你有不是HISTTIMEFORMAT在使用会话时设置环境变量,命令时间将不是被保存,您当然就看不到它们了。默认情况下,对于每个缺少时间指示符的命令,当前时间将被打印为命令时间。

如果您查看该~/.bash_history文件,您可以查看是否已为会话激活时间戳。然后每隔一行将以 开头,#后跟纪元时间下一个命令。

答案2

如果您知道 shellbash和历史文件,.bash_history简单的获取就足够了。

scp user@ip:.bash_history .

对于时间数据,

  • .bash_history文件将携带所有会话历史数据的时间信息,这些会话均已HISTTIMEFORMAT配置
  • 我认为历史更新将带有整个会话的时间戳,该HISTTIMEFORMAT会话中任何时候都有配置
  • 这给我们带来了一个小的限制
    • 如果你有这些远程用户bash profile登录
      export HISTTIMEFORMAT='some format'.bash_history
    • 否则,以任何形式运行远程历史命令都不会获取时间数据 - 只是因为它.bash_history首先没有存储(到);它会在每个会话结束时丢失,只有命令列表被保存

希望最后一点澄清了获取时间数据的可行性。
好消息是,如果您登录时可以看到过去会话的时间数据,则说明已配置,您无需进行任何更改。如果没有,只需在正在使用的export中插入即可bash profile——无需安装。

相关内容