SSH进入主机时,我正在使用RemoteLoginAutoScreen脚本启动屏幕会话。
与链接脚本的区别:我使用的是zsh,RemoteLoginAutoScreen使用的是bash
我遇到的问题是我的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登录期间看到会话,而在之后却看不到?
您有的两个副本screen
。其中一个将其会话存储在中/tmp/uscreens
,另一个将其会话存储在中/var/run/screen
,因此他们看不到彼此的会话。
即使您可以强迫他们查看彼此的会话,也有可能它们的副本screen
是不同的版本,并且如果彼此交谈会发生不好的事情。但是,无论如何,您已经观察到它不允许您强制它使用来使用其他会话目录$SCREENDIR
,这是一种安全措施(因为screen
特权,可能是setuid或setgid,取决于确切的操作系统和配置)。
发生此问题的原因$PATH
是您登录的方式有所不同,这取决于您的登录方式。
解决方案是使用与启动屏幕相同的屏幕副本来恢复会话。或者,您可以禁用或卸载的副本之一,screen
以消除将来造成混淆的可能性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句