쉘에서 화면을 실행하면 세션을 찾을 수 없지만 SSH 로그인 중 화면을 실행하면 세션을 찾을 수 있습니다.

쉘에서 화면을 실행하면 세션을 찾을 수 없지만 SSH 로그인 중 화면을 실행하면 세션을 찾을 수 있습니다.

나는 사용하고있다원격 로그인 자동 화면호스트에 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.

기반질문환경 변수를 /var/run/screen/S-alexq로 설정 하려고 했지만 SCREENDIR이렇게 해도 화면에서 여전히 세션을 찾을 수 없습니다.

$ 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정확한 OS 및 구성에 따라 setuid 또는 setgid일 수 있는 권한 때문에). .

$PATH이 문제는 로그인 방법에 따라 로그인 방법이 다르기 때문에 발생합니다.

해결 방법은 세션을 시작할 때와 동일한 화면 복사본을 사용하여 세션을 재개하는 것입니다. 또는 복사본 중 하나를 비활성화하거나 제거하여 screen향후 혼동 가능성을 제거할 수 있습니다.

관련 정보