我用自动SSH并且屏幕在我的 Ubuntu 服务器上,由于我的网络连接很差,我同时使用这两种方式来保持连接,即使我的网络连接丢失了...但是当我第一次使用 screen 作为 ssh 中的终端时,我遇到了很多问题,例如滚动问题(我在连接到我的服务器时在手机上使用 kali linux nethunter)但这似乎已经解决了,我现在可以滚动了。我习惯使用基本的 SSH 连接到我的 Ubuntu 服务器,使用它时我很舒服。当我像这样使用 SSH 连接时:
查看上面的输出历史记录,当我连接到服务器时,SSH 不会清除它...但是当我使用autossh + screen
此命令时:
AUTOSSH_GATETIME = 5 autossh -M 0 -- -o“ServerAliveInterval 0”-o“ServerAliveCountMax 1”-R 2202:localhost:22 -L 8080:localhost:80 -t[电子邮件保护]-p 8288 $'bash-c'执行屏幕-RD'
成功连接到服务器后,屏幕会删除现有的输出历史记录,并且命令提示符会移动到终端顶部,如下所示:
我不希望在使用时发生这种情况autossh + screen
,我希望它像普通 ssh 一样运行,我的意思是,我不想屏幕覆盖终端,并且不想要命令提示符移动,并且像基本的 ssh。
有人有解决方案吗?如果有人能帮助我,我将不胜感激,先谢谢了!
答案1
那行不通screen
。
屏幕是实际上是在你的常规终端内运行一个完整的终端,解释控制序列并输出新的控制序列;它被设计成这样,以便能够完全恢复你正在工作的环境——不仅是在你的连接中断并且你从同一个终端重新连接时,而且当你从完全不同的地方连接时,你想Screen 带来回滚 - 或者当使用 Ctrl-A 在同一个 Screen 会话中的多个“窗口”之间切换时,每个窗口都有自己的回滚。
部分原因是终端应用程序没有可靠的方法来更新终端回滚历史记录(而且在 Screen 的早期,它们是根本没有这样东西的物理终端),所以 Screen 唯一可行的选择是禁用它(使用“altscreen”输出模式)并自行处理滚动。
(另一个原因是 Screen 允许你分裂将屏幕分成多个垂直或水平窗格,每个窗格都有自己的滚动历史记录,这与依赖父终端的滚动完全不兼容。)
tmux
也以相同的方式工作,但在许多方面是 Screen 的更好替代品。(除了其默认的热键选择 Ctrl-B,我总是将其改回 Ctrl-A。)我建议先尝试一下;你很可能很快就会习惯在这种环境中工作。(许多人通过包装器使用 screen/tmux byobu
。zellij
是另一个非常花哨的终端多路复用器。)
你可以尝试dtach
,它不能进行完整的终端仿真——它只能像您想要的那样附加和分离输出——但后果是它不支持像 screen/tmux 那样在多个窗口之间切换,或者正确恢复全屏应用程序的状态。
abduco
可能是 dtach 的更现代的替代品。(它旨在与 dvtm 一起使用,后者也是一个全屏多路复用器,所以我不确定它处理非 altscreen 应用程序的效果如何——我自己从未尝试过。)
最后,我建议采用一种完全不同的方法,即建立一个WireGuard VPN 隧道连接到具有稳定连接的服务器之一(基于 WireGuard 的商业 VPN 服务也应该可以完成这项工作),然后通过该服务器使用常规 SSH。大多数类型的 VPN 隧道已经可以防止连接在您的 IP 地址更改时断开(或在其 NAT 状态重置时被路由器终止),但 WireGuard 尤其擅长处理有损和不可靠的连接以及客户端 IP 更改。最重要的是,它在多点配置(您可以直接连接到每个服务器)以及中央网关配置中运行良好。
如果您不想从头开始设置隧道,Tailscale 和 Innernet 是两款基于 WireGuard 的 VPN 工具。其他一些 VPN 产品(例如 ZeroTier)也具有类似的有用属性(OpenVPN 则不那么有用,尽管如果您调整自动重新连接设置,它可以正常工作)。