每当我在 SSH 会话中有一个后台 X11 连接时,我必须使用~.而不是exit退出 ssh 会话。
这里有什么区别?我可以一直使用转义序列~.吗?
exit告诉你当前的 shell 退出。因为(当没有隧道连接时,例如 X11,活动)这意味着 sshd 在服务器端调用的进程退出,SSH 然后断开连接。
~. 是 SSH 捕获并立即断开连接(包括 X11 隧道)的“魔术”转义序列。
所以,不,这些不能互换。如果您希望您的远程 shell(或任何远程运行的程序)正常退出,您应该相应地结束它。
在另一个答案中已经很好地描述了它,但我会添加一些背景:
今天的单个 SSH 连接可以包含多个会话(您的 shell、命令)、TCP 转发通道和X11 转发通道。不同之处在于:
写入exit(或Ctrl+ D)会破坏会话通道,但如果有一些 X11 通道处于活动状态(例如,gvim与处理剪贴板和标题的 X 服务器保持多个连接,但不会被 关闭exit)。写入exit将使此 X11 应用程序继续运行并且您的终端将“挂起”直到它关闭。
写作~.撕毁了整个联系。您会注意到,如果您运行某个 X11 应用程序,它也会在您编写~..