Linux屏幕分离和注销

3
我非常喜欢screen工具并且在我的服务器上广泛使用它,因此我设置了我的.bashrc文件以便在登录时恢复我的屏幕会话。唯一缺少的功能是不需要显式地分离/关闭屏幕会话即可注销ssh会话的功能。
我考虑编写一个脚本运行screen -dS "mainScreen"; exit,但这是不可能的,因为这个脚本显然在分离指令后继续在屏幕会话中执行,并且不会影响我的ssh会话,所以我得到的唯一结果就是屏幕会话被终止。
有没有一种方法可以原子地执行“分离和退出”操作,使屏幕继续运行而我的ssh会话终止?

使用 ~. 关闭 ssh 会话。 - William Pursell
我没有完全理解... ~. 应该做什么? - mellotanica
如果您键入 ~.,它应该关闭 SSH 会话。屏幕会话将继续运行。 - William Pursell
我可能误解了~字符的含义,我尝试将其用作字符,或者用作 Ctrl + . ,或者用作 Alt + .,但是这些操作都没有产生任何相关的效果。 - mellotanica
1
不,它是一个字面上的“~”。当您执行cd ~username时键入相同字符。这是ssh的转义字符,并且可以使用“-e”进行更改。请查看ssh的文档。 - William Pursell
好的,我之前没有看到任何反应,因为我输入了太多的 ~ 符号,它将字符打印到终端而不是选择转义字符,非常感谢!请将其作为答案重新发布,以便我可以将其标记为解决方案! - mellotanica
2个回答

5

ssh支持一种机制,允许您直接输入内容,而不是在连接的另一端的shell中输入。当您键入转义键时,该机制会启用,可以使用-e设置并默认为~。这对于各种功能非常有用,例如在已连接的会话中设置端口转发或终止连接。您可以键入~?以获取可用命令的完整列表。特别地,要终止会话,请键入:

~.

2

不要让ssh运行登录shell(默认值),而是直接运行screen:

ssh remoteHost -t screen -dRS "mainScreen"

当你分离时,屏幕客户端会退出,这会导致 ssh 关闭连接。
(注意:我包括了 Steve 建议的 screen 命令,但你可以使用任何你通常用来连接你的会话的命令。)

你也不需要在 screen 命令中加上 -r 选项吗? - Steve
可能吧 :) 我已经很久没有使用screen了。传递给ssh的命令应该是您当前在登录时使用的附加会话的命令。 - chepner
实际上,使用大写的R(-dRS“mainScreen”)是最好的,因为如果会话不存在,它将创建该会话。 - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接