我正在使用远程登录自动屏幕当我 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
以消除未来混淆的可能性。