linux 下查看其他 ttys 的工具?

linux 下查看其他 ttys 的工具?

BSD 系统有一个简洁的手表用于监听其他 tty 的工具:

您是否曾经遇到过用户登录您的盒子然后向您寻求帮助的情况?或者您是否曾经好奇过您的用户在您的系统上做了什么? watch(8) 实用程序将让您窥探另一个 tty,让您看到其他用户正在做什么,甚至与他们交互。它是每个网络管理员必备的实用程序。

不幸的是,watchLinux 上的情况却不同。

到目前为止我已经得到:

  • ttysnoop需要修改 /etc/inittab 这很痛苦
  • conspy到目前为止还无法让它工作
  • peekfd有效,但只有一种方式(您可以看到用户输入但看不到输出)
  • screen当然很好,但用户需要使用屏幕......

linux 没有一个好的等效工具吗?

答案1

ptysnoop 通过 SystemTap

安装系统点击, 创造普蒂斯努普文件:

#!/usr/bin/stap

probe kernel.function("pty_write") {
    if (kernel_string($tty->name) == @1) {
            printf("%s", kernel_string_n($buf, $c))
    }
}

使其可执行。现在只是看着/dev/pts/6sudo ptysnoop pts6

蒂普德

蒂普德是一个多操作系统内核级 tty 记录器(tty 的按键和屏幕记录器),具有同步重播支持。它支持大多数 tty 类型,包括 vc、bsd 和 unix98-style ptys (xterm/ssh)、serial、isdn 等。由于在内核中实现,因此对于默认用户来说这是不可避免的。如果日志守护进程未处于活动状态,它的运行不会产生任何开销。

不过,您需要一个内核模块。

终端记录器

结束了开始编写一个基于 strace 的小型程序终端记录器非常适合我的需求的工具。您所需要的只是 perl 和 strace,然后是sudo ttylogger pid

将此与用户 shell 的 pid 一起使用以转储所有后续命令的输出。

答案2

您可以为 指定多个文件描述符peekfd

例如

peekfd -n -8 -d -c 24184 0 1 2

将监听 pid 24184 的 stdin、stdout 和 stderr。

-c选项还将附加到任何子进程。为了查看它们的输出,这是必要的(例如,查看ls在监听的 shell 进程中运行的输出)

奇怪的是,我发现它总是成功附加到子进程(无论我在监听的 tty - ls,中运行哪个子进程uname/bin/echo而不是内置的echo),但也总是打印一条错误消息Error attaching to pid -38(以及“pid”)是总是-38)。

man peekfd说:

诊断

可能会在 stderr 上发出以下诊断信息:

  Error attaching to pid ...

尝试附加到进程时发生未知错误。您可能需要成为 root 用户。

对我来说似乎是一个错误 - 我正在跑步peekfd以 root 身份运行,而且它总是打印错误消息,始终使用相同的伪造 ( -38) PID。

注意:手册页还说:

错误

可能很多。如果您正在监视的进程终止,请不要感到惊讶。

相关内容