在Linux中记录SSH终端

在Linux中记录SSH终端

我正在配置堡垒主机

跳转服务器

我正在尝试自动记录服务器中的 SSH 终端,我正在使用。当我将以下内容添加到我的TermRecord时,问题就开始了:TermRecord -o ss.html.bashrc

echo "TermRecord -o ss.html" >> ~/.bashrc

终端将充斥着“脚本已启动”而不保存任何内容。

答案1

我对此完全没有经验TermRecord,我的回答是基于对发生的事情的合理(我希望如此)猜测。

看起来再次喜欢TermRecord来源.bashrc,或者更有可能的是它运行另一个bash提供文件来源的地方。我认为后者无论如何它TermRecord再次运行,又有另一个bash来源.bashrc,等等。

如果这阻止您登录,请参阅无需运行即可登录bash_profilebashrc。我会尝试从那里ssh -t username@hostname /bin/sh修复我的问题。.bashrc

为了使其按预期工作,您需要找到一种方法来抑制执行TermRecordif already inside TermRecord。最好的方法是如果程序向环境中添加了某个变量,那么您就可以检测到它。我找不到它是否设置了任何变量。

如果没有,你可以自己做。而不是

TermRecord -o ss.html

在你的.bashrc使用中是这样的:

[ -z "$TR_PPID" ] && { export TR_PPID=$$; TermRecord -o ss.html; }

意思是:如果变量为空,就将其设置为shell PID并运行TermRecord;否则不执行任何操作(继续下一行)。

笔记:

  • 确保命名的变量TR_PPID未被其他任何变量使用TermRecord。这个名字是我编造的(来自“TermRecord parend PID”),但可能会有冲突。
  • -o ss.html如果您多次登录,硬编码可能会带来麻烦。
  • 如果TermRecord执行,则其余部分将在退出时.bashrc由外部提供。内部将自行提供文件。bashTermRecordbash
  • 为了避免嵌套进程,您可以考虑用 替换外部进程,bashTermRecord不是创建单独的进程;可以使用 来完成exec TermRecord -o ss.html。在这种情况下,您可能希望整行都位于 的最开头.bashrc。现在变量将表示“TermRecord PID”,因此这TR_PID将是一个更好的名称。

可能的(?) 替代方案:用作TermRecord您的登录 shell。

  • 只有当它支持作为登录 shell 时才可以(我不知道这一点);否则可能会造成麻烦(但也许自定义包装器可以修复它)。更改登录 shell 的实验(请参阅chsh)应该在不离开旧 shell 甚至不使用额外的“紧急 shell”的情况下进行。如果您以任何方式将自己锁定并且无法重新登录,您仍然可以使用旧 shell 进行修复。
  • 这可能需要编辑/etc/shells
  • 在这种情况下,您根本就不应该TermRecord从您的开始。.bashrc

答案2

据我了解,您希望在 ssh 连接到服务器时记录所有终端 stdin/stdout?

考虑使用 脚本命令

script <output_filename>

然后 ssh 到你的服务器,完成后关闭你的 ssh 连接并

exit

要停止脚本录制,您提供的 $output_filename 将位于您当前的目录中。

附言:你可以使用以下约定来确保你的录音始终具有唯一的名称

script foo_$(date  +"%Y-%m-%d%H%M")   # full date and time included in filename

或者

script foo_$(date +%s)  # unique number calculate by seconds since the Unix epoch

相关内容