Ssh

在 shell 中執行螢幕找不到會話,但在 ssh 登錄期間執行螢幕可以

  • September 12, 2018

當我 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以消除未來混淆的可能性。

引用自:https://unix.stackexchange.com/questions/219116