DISPLAY를 호스트 이름으로 설정할 수 없는 이유는 무엇입니까?

DISPLAY를 호스트 이름으로 설정할 수 없는 이유는 무엇입니까?

CentOS 6.7에서는 ssh로컬 워크스테이션에서 원격 호스트로 이동하여 호스트 이름이나 IP 주소를 사용하여 DISPLAY 환경 변수를 워크스테이션으로 설정하면 X 디스플레이를 열 수 없습니다.

예:

$ ssh -Y host1
$ export DISPLAY=ws1:0.0    # workstation hostname=ws1
$ xeyes
Can't not open display 

그러나 다음은 작동합니다.

$ ssh -Y host1
$ echo $DISPLAY
localhost:10.0
$ xeyes           # works as expected

호스트 이름으로 $DISPLAY를 설정할 때 X-display가 작동하지 않는 이유는 무엇입니까?

답변1

심각한 보안 문제로 인해 X 서버에 대한 원격 액세스는 이제 일반적으로 금지됩니다.

방화벽 및/또는 X 서버 설정으로 인해 이러한 연결이 성공하지 못할 수 있습니다.

그러면 로컬 및 Unix 도메인 소켓 연결만 허용되므로로컬 호스트:서버[.display]아니면 전혀 호스트가 없습니다:서버[.display]사용 가능한 설정이 있습니다.

X 서버가 TCP 포트에서 수신 대기하는지 확인하려면 다음 명령을 실행하고 X 서버(터널링의 경우 SSH)가 6000+ 범위의 포트를 사용하고 있는지 확인할 수 있습니다.

$ sudo netstat -anp|grep -w LISTEN

서버가 Unix 바인딩 소켓만 수신하는 경우 다음을 사용하여 표시됩니다 lsof.

$ sudo lsof -p $(pgrep Xorg)

다음 줄은 Unix 소켓을 나타냅니다.

Xorg    1874 root   21u     unix 0xffff8800d5db4000      0t0      21169 @/tmp/.X11-unix/X0 type=STREAM

TCP 포트에서 수신 대기하는 모든 프로세스를 식별하려면 다음 명령을 실행할 수 있습니다.

$ sudo lsof -P | grep -w LISTEN

예를 들어, 다음은 TCP 포트 22에서 수신 대기하는 SSH 데몬입니다.

sshd 1032 루트 4u IPv6 22727 0t0 TCP *:22(듣기)

답변2

로컬 X 서버가 X 서버의 최신 버전인 경우 Xorg기본적으로 직접 네트워크 연결을 허용하지 않습니다. 이 기능을 활성화하려면오래되고 전혀 안전하지 않음메서드에 액세스하려면 이 -listen tcp옵션을 포함하도록 X 서버를 시작하는 데 사용되는 명령줄을 수정해야 합니다.

이전 배포판은 기본적으로 이 옵션을 사용하여 X 서버를 시작하며 -nolisten tcp, 보호되지 않은 레거시 네트워크 액세스를 활성화하려면 X 서버 명령줄에서 이 옵션을 제거해야 합니다.

대부분의 주요 Linux 배포판은 2000년 이전에 기본적으로 보호되지 않은 X11 연결을 차단하기 시작한 것 같습니다.

관련 정보