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