X 전달 SSH를 사용할 때 `$DISPLAY`를 지정하는 방법

X 전달 SSH를 사용할 때 `$DISPLAY`를 지정하는 방법

서버에 연결 하면 일반적으로 10부터 시작하여 모든 사용자가 사용하지 않은 가장 낮은 숫자인 값이 할당 됩니다 ssh -X. (예를 들어 다른 사용자가 $DISPLAY를 사용하지 않으면 10이 됩니다. 사용자가 이미 10을 사용하고 있으면 11이 됩니다.)$DISPLAYlocalhost:x.0x

이제 내 질문은: 실행 시간 에 x숫자를 지정하는 방법이 있습니까 ssh -X?100

내 의도는 서버에서 계속 실행되고 항상 localhost:100.0디스플레이로 사용되는 별도의 프로그램을 갖는 것입니다. 이렇게 하면 서버에 대한 X 연결이 끊어지더라도 다시 로그인할 수 있으며 연결이 localhost:100.0끊어진 동안 다른 사용자가 동일한 포트를 점유하는 것에 대해 걱정할 필요 없이 계속 연결을 유지할 수 있습니다. 기본값인 10에 비해 더 높은 숫자인 100을 선택하면 대다수가 점유될 가능성이 방지됩니다.

답변1

ssh -X를 실행할 때 x에 100과 같은 숫자를 지정하는 방법이 있습니까?

아니요, 번호를 "할당"해야 할 뿐만 아니라 ssh는 해당 번호에 해당하는 로컬 소켓에서 X 프로토콜도 전달해야 하기 때문입니다. 그리고 ssh가 연결될 때 "number"가 무료라는 보장은 없습니다. 이것이 바로 ssh가 이에 대한 옵션을 제공하지 않는 이유입니다.

그러면 서버에 대한 X 연결이 끊어지더라도 다시 로그인하여 여전히 localhost:100.0에 대한 연결을 설정할 수 있습니다.

해당 서버가 X 서버이기 때문에 작동하지 않습니다.현지의머신(ssh를 통해 로그인한 머신)과 클라이언트 프로그램이 실행 중입니다.외딴기계. 따라서 모든 클라이언트 프로그램은 (관련된 상태로 인해) 연결을 다시 설정해야 합니다.

다시 연결할 수 있는 원격 데스크톱을 원한다면 VNC와 같은 도구 사용을 고려해 보세요.

답변2

나는 두 가지 방법을 찾았습니다.


첫 번째

  1. 로컬 머신에서,ssh -X remote
  2. 디스플레이 포트 번호를 echo $DISPLAY | awk -F'[:.]' '{print $2}'10으로 가정하고 가져옵니다.
  3. 원격 포트 6020이 사용되는지 확인하십시오. lsof -i TCP:6020사용되지 않는다고 가정합니다.
  4. 포트 6020을 6010으로 전달: ssh -NTR 6020:localhost:6010 localhost선택적 추가( -f종료를 사용할 때 이 프로세스를 종료해야 함을 기억해야 함, 권장됨)-ftrap "kill $!" EXIT
  5. 환경을 설정합니다:DISPLAY=${DISPLAY/:10/:20}
  6. ~/.Xauthority디스플레이 포트가 localhost:20.0동일한 xauth 매직 키를 갖도록 업데이트되었습니다 .xauth add $(xauth list :10 | sed 's/:10/:20/')

또는

  1. 다음을 사용하지 않고 원격으로 ssh를 사용합니다 -X.ssh remote
  2. 원격 컴퓨터 그룹에서DISPLAY=localhost:20.0
  3. 로컬 시스템에서 원격 포트를 6020로컬 시스템의 xserver 소켓으로 전달하고 선택적으로 추가합니다 /tmp/.x11-unix/X0.ssh -NTR 6020:/tmp/.x11-unix/X0 remote-f
  4. 로컬 시스템의 xauth 키를 원격 시스템으로 전송합니다. local 에서 xauth list :0다음과 같다고 가정합니다.local-hostname:0 MIT-MAGIC-COOKIE-1 hash
  5. 원격 시스템에서: 실행하십시오 xauth add remote-hostname:20 MIT-MAGIC-COOKIE-1 hash.

이 두 가지 방법을 비교하면 첫 번째 방법은 로컬 시스템의 xauth 키를 원격 시스템으로 전송할 필요가 없습니다.아마도더 안전한(이렇게 하면 어떤 잠재적인 보안 문제가 발생할 수 있는지 알려줄 수 있는 전문가가 있나요?). 하지만 두 개의 포트를 점유해야 합니다. 하나는 자체적으로 할당된 포트 ssh -X이고 다른 하나는 사용하려는 포트입니다.

답변3

디스플레이를 지정할 수 있는 방법이 없다는 것을 알고 있습니다.

Linux(또는 최소한 Ubuntu)에서 모니터는 다음과 같습니다 /tmp/.X11-unix/./tmp/.X11-unix/X0:0

따라서 소켓을 다른 경로로 이동할 수 있으며 여전히 작동합니다. (이것이 SSH로 전달된 X 연결에 해당되는지 확실하지 않지만 그럴 수도 있습니다.)

(그런데 ssh -Y아마도 보다 더 안전할 것입니다 ssh -X. 그러나 오랫동안 둘 중 하나를 사용하지 않았습니다.)

어떤 경우든 소켓이 닫히면(SSH 연결 종료로 인해) 소켓에서 실행 중인 모든 프로그램이 종료될 수 있습니다.

영구 X 프로그램을 실행하려면 VNC 서버를 실행하고 VNC 클라이언트를 사용하여 연결하는 것을 고려하십시오. SSH를 사용하여 VNC 연결을 안전하게 터널링할 수 있습니다. 나는 이것을 자주한다. 나는 "가상" 모니터에서 VNC 서버를 실행할 수 있다고 생각하지만(VNC 클라이언트가 연결되어 있을 때만 모니터를 볼 수 있다는 의미), 저는 그렇게 해본 적이 없습니다.

고쳐 쓰다

따라서 SSH를 통한 X11 전달에는 다음 세 가지 요소가 포함될 수 있습니다.

  1. 특정 포트의 TCP 소켓
  2. DISPLAY 변수
  3. X 권한 요청을 처리하는 일부 형태

이 세 가지 모두 수동으로 수행할 수 있습니다. 모든 포트에 대해 수동 전달을 사용할 수 있습니다 -R. 디스플레이를 수동으로 설정할 수 있습니다. 어떻게든 X 권한 설정을 수동으로 조정할 수 있습니다(아마도?). X 권한을 다루는 것이 아마도 가장 까다로울 것입니다. 어떻게 해야 할지 모르겠지만 가능하다고 생각합니다.

-X1, 2, 3을 수행하면 또는를 사용하지 않고도 X11 연결을 전달할 수 있습니다 -Y.

나는 여전히 대부분의 X 프로그램이 서버에 대한 연결이 닫힐 때 종료된다고 의심합니다.

저는 여전히 VNC 서버와 클라이언트를 설정하면 더 나은 결과를 얻을 수 있다고 믿습니다.

관련 정보