DISPLAY 변수에 호스트 이름/IP를 지정할 수 있도록 SSH를 어떻게 구성합니까?

DISPLAY 변수에 호스트 이름/IP를 지정할 수 있도록 SSH를 어떻게 구성합니까?

CentOS6에서 실행하려는 오래된 응용 프로그램이 있는데 abc1과 abc2 등 여러 시스템을 사용합니다.

abc1에 로그인하고 ssh를 통해 abc2에 연결된 애플리케이션을 실행하고 변수를 DISPLAYabc1 abc1:0.0에서 새 창을 열려고 시도하는 프로세스를 실행했습니다. 그러나 실패합니다.cannot open display

ssh -X abc2or 을 수행하면 ssh -Y abc2문제 없이 xterm을 열 수 있지만 DISPLAY 변수는 다음과 같이 설정됩니다.localhost:10.0

abc1이 올바르게 구문 분석된다는 점에 유의하세요(abc2에서 abc1을 ping할 수 있음).

애플리케이션을 전혀 수정할 수 없으므로 애플리케이션 DISPLAY이 사용하는 변수를 제어할 수 없습니다. 그러나 abc1 및 abc2의 구성을 수정할 수 있습니다. 저는 격리된 네트워크에 있고 보안에 관심이 없습니다.

SSH 구성에 뭔가가 있거나 abc1:0.0이것이 작동하도록 변경할 수 있는 다른 것이 있습니까?

답변1

로컬로 로그인한 경우 abc1에는 관련이 없을 수도 있습니다... 하지만 SSH X11 전달을 사용하여 워크스테이션에서 연결하는 경우 abc1시작할 수도 있습니다.중첩된 X 서버abc1들어오는 연결을 캡처하여 abc1:0.0보안 SSH X11 터널 내 워크스테이션의 로컬 X 서버로 전달합니다.

RHEL/CentOS 6에서 필요한 RPM 패키지는 또는 xorg-x11-xserver-Xnest( xorg-x11-xserver-Xephyr최신 구현일수록 성능이 더 좋을 수 있음)입니다.

원래:

  • 일반 X 서버를 abc1TCP 연결을 수신하지 않는 기본 상태 로 둡니다.
  • 워크스테이션에서 로컬 X 서버 실행
  • 워크스테이션에서 X11 전달 SSH 연결을 설정합니다.abc1
  • 적절한 옵션을 사용하여 백그라운드에서 듣기를 시작 Xnest하거나 허용하세요.Xephyrabc1abc1:0.0
  • 애플리케이션을 시작하세요.

이 질문에 대한 @roaima의 의견을 참조하세요. 오래된 X 응용 프로그램을 사용하더라도 응용 프로그램에 DISPLAY 설정을 하드코딩하는 것은 항상 매우 성가신 일입니다.

DISPLAY 변수는 구성 가능한 위치에 설정될 가능성이 높습니다. 예를 들어, 애플리케이션을 실행하는 데 사용되는 사용자 계정의 로그인 스크립트에 지정될 수 있습니다. 그러나 수정이 애플리케이션 수정으로 간주되면 권장 해결 방법을 사용해야 합니다.

답변2

무슨 일이 일어났는지에 대한 간략한 설명:

X 전달을 통해 ssh원격 컴퓨터의 X 서버처럼 원격 컴퓨터(abc2)에 로컬 X 프로토콜 소켓을 생성한 다음 SSH 터널을 통해 X-ray 프로토콜을 원래 컴퓨터(abc1)로 전달합니다. 로컬 소켓은 으로 식별됩니다 localhost:10.0.

OTOH, abc1:0.0모니터는 이전 X 네트워크 프로토콜을 사용하고 abc1의 X 서버가 올바른 포트에서 수신 대기할 것으로 예상합니다. 이 기능은 매우 안전하지 않기 때문에 최신 시스템에서는 기본적으로 비활성화되어 있습니다.

따라서 상황에 따라 abc2에서 실행되는 응용 프로그램이 abc1에서 실행되는 X 서버를 사용해야 하는 경우 가장 쉬운 방법은 이 -nolisten옵션을 사용하지 않고 abc1에서 X 서버를 시작하는 것입니다. 이렇게 하려면 X 서버가 시작되는 방법(일반적으로 xdm/gdm/kdm/lightdm과 같은 디스플레이 관리자에 의해)을 찾아 시작 호출을 수정해야 합니다.

다음으로 해야 할 일은 액세스 제어를 활성화하는 것입니다. 격리된 네트워크에서는 xhost +모든 연결을 사용하고 허용하세요. 그렇지 않으면 xauth현재 MIT 매직 쿠키를 사용하고 추가할 수 있습니다. 세부 사항은 부분적으로 X 서버가 컴퓨터에 구성되는 방식에 따라 달라집니다.

관련 정보