在 shell 中运行 screen 无法找到会话,但在 ssh 登录期间运行 screen 可以

在 shell 中运行 screen 无法找到会话,但在 ssh 登录期间运行 screen 可以

我正在使用远程登录自动屏幕当我 ssh 到主机时启动屏幕会话的脚本。

差异来自链接脚本:我正在使用桀骜和 RemoteLoginAutoScreen 使用巴什

我遇到的问题是我的 ssh 连接已断开(这种情况经常发生,因此自动屏幕配置)并且我在重新连接到现有屏幕会话时遇到问题。

在主机上,我可以看到我的屏幕进程仍在运行,并且屏幕套接字仍然存在:

$ ps auxww | grep -i screen | grep alexq
alexq     1818  0.0  0.0 103452   868 pts/19   S+   18:08   0:00 grep --color=auto -i screen
alexq    20270  0.0  0.0 120040  2004 ?        Ss   Jul21   0:19 SCREEN -R

$ ls -al /var/run/screen/S-alexq
total 6
drwx------ 2 alexq    alexq  4096 Jul 29 17:26 .
drwxrwxr-x 5 root     screen 4096 Jul 21 21:33 ..
prwx------ 1 alexq    alexq     0 Jul 29 17:46 20270.pts-14.myhost

但是当我登录(没有处于屏幕会话中)时,屏幕找不到我现有的会话:

$ screen -ls
No Sockets found in /tmp/uscreens/S-alexq.

基于此问题我尝试将SCREENDIR环境变量设置为 /var/run/screen/S-alexq 但当我这样做时,屏幕仍然找不到会话:

$ export SCREENDIR=/var/run/screen/S-alexq
$ screen -ls
No Sockets found in /var/run/screen/S-alexq.

$ export SCREENDIR=/var/run/screen
$ screen -ls
You are not the owner of /var/run/screen.

我真正感到困惑的是,当我在 ~/.zshrc 文件中用“screen -ls”替换启动屏幕时,我将以下内容打印到控制台:

There are screens on:
    20270.pts-14.myhost   (Attached)
1 Sockets in /var/run/screen/S-alexq.

因此,出于某种原因,我的 ssh 登录期间的屏幕可以找到现有会话,但当我在控制台屏幕上时找不到该会话。

谁能帮我弄清楚为什么屏幕只能在我的 ssh 登录期间看到会话而不是之后?

答案1

您有两份screen.其中一个将其会话存储在 中/tmp/uscreens,另一个将其会话存储在 中/var/run/screen,因此他们看不到彼此的会话。

即使您可以强迫他们查看彼此的会话,也有可能出现screen不同版本的副本,如果两人互相交谈,就会发生不好的事情。然而,无论如何,您已经观察到它不允许您强制它使用不同的会话目录$SCREENDIR,这是一种安全措施(因为screen具有特权,可能是 setuid 或 setgid,取决于确切的操作系统和配置)。

$PATH出现此问题的原因是,根据您的登录方式,您的登录方式有所不同。

解决方案是使用与启动会话时相同的屏幕副本来恢复会话。或者,您可以禁用或卸载其中一个副本,screen以消除未来混淆的可能性。

相关内容