如何生成 TTY 文本虚拟控制台?

如何生成 TTY 文本虚拟控制台?

由于(我认为是)我的远程计算机的 Linux 版本 (Kali v2.0) 上存在某种错误,我的TTY 文本控制台无法启动直到我坐在机器上并按CtrlAltFn

我用来远程登录SSH进入该计算机,然后我使用 TTY n 访问间谍,因此,例如:

# conspy 6

将我的 SSH 客户端(在本例中为 Putty)发送到 TTY6。

但是,只要 TTY 控制台尚未启动,我就只能得到黑屏光标闪烁。
所以我首先发送:

# agetty 38400 tty6 &

然后 TTY6 开始运行,所以这次我可以登录并交互,但我收到了这个奇怪的消息:

Kali GNU/Linux 2.0 kali tty6
kali login: luis
Password:
Linux kali 4.0.0-kali1-686-pae #1 SMP Debian 4.0.4-1+kali2 (2015-06-03) i686

The programs included with the Kali GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Kali GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
-bash: cannot set terminal process group (3662): Inappropriate ioctl for device
-bash: no job control in this shell

agetty命令是否是正确的方法生成 TTY文本虚拟控制台?

答案1

这是设计使然。

由于(我认为)我的远程计算机的 Linux 版本 (Kali v2.0) 上存在某种错误,我的 TTY 文本控制台只有在我本地坐在计算机上并按 时才会启动。CtrlAltFn

这不是一个错误。这是 systemd Linux 按设计工作的情况。内核虚拟终端的 TTY 登录服务logind在切换到前台时按需启动。如果您远程访问机器并使用 ConSpy,那么您当然可以不是将内核虚拟终端切换到前台。

agetty命令是生成 TTY 文本虚拟控制台的正确方法吗?

是的,也不是。是的,这是产生一个盖蒂/登录服务。不,它本身不会生成虚拟终端。不,您不直接运行它。

如前所述,logind这样做。每个虚拟终端都有一个名为 的 systemd 服务。这就是运行的。我们可以手动启动该服务,或者根据需要启动它。autovt@ttyN.serviceagettylogind

systemd的问题screen以及tmux与 systemd 相关的问题。

当然,如前所述,您正在使用内核的虚拟终端子系统和 ConSpy 作为screen或等系统的服务器和客户端部分tmux。您可以切换到使用screentmux

screen和的问题tmux在于它们与 systemd 的互操作性不佳。这是一个已知的 systemd 问题,也是设计使然。如果您启动由 systemd 作为服务直接管理的登录会话的服务器部分screen或从其中启动(就像服务一样,并且在模式下运行 SSH 时服务确实如此),那么 systemdtmuxautovt@ttyN.servicesshd@connection.serviceAccept=yes当您注销时杀死服务器,因为根据设计,当服务终止时,它会杀死该服务中所有仍然剩余的进程,并且注销此类登录会话服务也被视为终止。

对于这种设计冲突,世界有多种解决方法可供选择,包括更改[email protected].到目前为止,最好的方法是使screentmux服务器本身进入托管服务。因此,您无需启动screentmux登录并以交互方式运行它。您可以通过将其作为通过 systemd 启动和停止的成熟服务来启动它。

此时,后台服务器进程中的所有内容screentmux派生的所有内容充其量都是过度设计的,因为后台服务器部分是全部这是 systemd 管理的screentmux服务需要做的,并且不需要“守护”其服务器。 (讽刺的screen是, tmuxsystemd的问题是完后还有举例说明为什么实际上不可能从交互式登录会话中安全、可靠地“守护进程”。)

备择方案

既然你提到了替代方案,这里还有另一个: nosh 有一个用户空间虚拟终端系统。您可以在 systemd 下运行 nosh 服务管理器,以及其下的一些 nosh和服务,通过 SSH 登录会话与模拟终端进行通信。 (如果您将 ConSpy 调整为不像当前那样硬连线设备名称,您甚至可以使用 ConSpy 查看模拟终端,因为有一个 vcsa 兼容的显示缓冲区可用。) 不会“守护进程”,并且只执行一项工作,模拟终端并位于伪终端的主端与模拟的显示和输入之间。ttylogin@vcN-ttyterminal-emulator@vcNconsole-ncurses-realizerconsole-terminal-emulator

这样做有几个附带的好处:它不受内核空间设计约束的限制,因此比内核中内置的仿真器程序更完整的 DEC VT 仿真。可以使用普通的 DEC 控制序列将终端的大小调整为任意大小。终端自动重置,确保安全,注销后立即而不是在下次调用登录时。

进一步阅读

相关内容