由于(我认为是)我的远程计算机的 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.service
agetty
logind
systemd的问题screen
以及tmux
与 systemd 相关的问题。
当然,如前所述,您正在使用内核的虚拟终端子系统和 ConSpy 作为screen
或等系统的服务器和客户端部分tmux
。您可以切换到使用screen
或tmux
。
screen
和的问题tmux
在于它们与 systemd 的互操作性不佳。这是一个已知的 systemd 问题,也是设计使然。如果您启动由 systemd 作为服务直接管理的登录会话的服务器部分screen
或从其中启动(就像服务一样,并且在模式下运行 SSH 时服务确实如此),那么 systemdtmux
autovt@ttyN.service
sshd@connection.service
Accept=yes
当您注销时杀死服务器,因为根据设计,当服务终止时,它会杀死该服务中所有仍然剩余的进程,并且注销此类登录会话服务也被视为终止。
对于这种设计冲突,世界有多种解决方法可供选择,包括更改[email protected]
.到目前为止,最好的方法是使screen
或tmux
服务器本身进入托管服务。因此,您无需启动screen
或tmux
登录并以交互方式运行它。您可以通过将其作为通过 systemd 启动和停止的成熟服务来启动它。
此时,后台服务器进程中的所有内容screen
和tmux
派生的所有内容充其量都是过度设计的,因为后台服务器部分是全部这是 systemd 管理的screen
或tmux
服务需要做的,并且不需要“守护”其服务器。 (讽刺的screen
是, tmux
systemd的问题是完后还有举例说明为什么实际上不可能从交互式登录会话中安全、可靠地“守护进程”。)
备择方案
既然你提到了替代方案,这里还有另一个: nosh 有一个用户空间虚拟终端系统。您可以在 systemd 下运行 nosh 服务管理器,以及其下的一些 nosh和服务,通过 SSH 登录会话与模拟终端进行通信。 (如果您将 ConSpy 调整为不像当前那样硬连线设备名称,您甚至可以使用 ConSpy 查看模拟终端,因为有一个 vcsa 兼容的显示缓冲区可用。) 不会“守护进程”,并且只执行一项工作,模拟终端并位于伪终端的主端与模拟的显示和输入之间。ttylogin@vcN-tty
terminal-emulator@vcN
console-ncurses-realizer
console-terminal-emulator
这样做有几个附带的好处:它不受内核空间设计约束的限制,因此比内核中内置的仿真器程序更完整的 DEC VT 仿真。可以使用普通的 DEC 控制序列将终端的大小调整为任意大小。终端自动重置,确保安全,注销后立即而不是在下次调用登录时。
进一步阅读
- https://unix.stackexchange.com/a/194218/5132
- Lennart Poettering(2011-05-19)。[bug?] 屏幕在 systemd 下无法正常工作。 systemd-开发。
- “使用 systemd 自动启动”。多路复用器.Arch 维基。
- 保罗·埃格尔顿 (2014-11-06)。 openssh:避免屏幕会话在与 systemd 断开连接时被终止。约克托项目。
- 与 ssh 断开连接时 tmux 会话被终止
- 乔纳森·德博因·波拉德 (2015)。《在systemd下运行nosh服务管理》。 Debian 二进制包。吃点东西。 JdeBP 的软件。
- 乔纳森·德博因·波拉德 (2015)。胆怯的管理员的安装方法 吃点东西。 JdeBP 的软件。
- 乔纳森·德博因·波拉德 (2015)。“用户空间虚拟终端”。 小吃指南。 1.20。吃点东西。 JdeBP 的软件。
- 乔纳森·德博因·波拉德 (2015)。快速浏览用户空间虚拟终端 吃点东西。 JdeBP 的软件。
- https://askubuntu.com/a/674147/43344
- 乔纳森·德博因·波拉德 (2015)。“继承与守护进程谬误”。“service”命令不再有问题。吃点东西。 JdeBP 的软件。