한 ssh
없이 -X
기계에, 그것은 (예를 들어 일부 설정을 변경할 수 있습니다 $DISPLAY
그것처럼 작동하도록) ssh -X
? 그렇지 않다면 이유가 무엇입니까? 감사.
답변
X11 전달을 사용하여 두 번째 연결을 작성한 다음 DISPLAY
첫 번째의 두 번째 연결에서 환경 변수를 사용할 수도 있습니다 .
첫 번째 창에서 :
$ ssh user@host
user@host$ ...
두 번째 창에서 :
$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0
첫 번째 창으로 돌아 가기 :
user@host$ export DISPLAY=localhost:10.0
user@host$ xterm
불행히도, ssh
시작한 프로세스 / 세션 또는 원격 시스템에서 실행하는 사용자에게 X11 (또는 기타) 포워딩을 포함하지 않습니다 (예 : 신임 정보를 확인하거나 확인하지 않는 Unix 소켓 사용 또는 네임 스페이스 사용). 이러한 포워딩은 원격 시스템의 모든 사람이 연결할 수있는 간단한 tcp 수신 소켓입니다. X11 포워딩의 모든 보안은 X11 인증에 의존합니다.
X11 손으로 전달
sshd_config(5)
맨는 것을 언급한다 :
X11 전달을 비활성화하면 사용자가 항상 자신의 전달자를 설치할 수 있으므로 X11 트래픽을 전달하지 못하게됩니다.
손으로 직접 할 수있는 방법은 다음과 같습니다.
우선, x11 인증 메커니즘을 우회하는 호스트 또는 사용자 기반 액세스 제어를 비활성화해야합니다 [1] :
$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect
그런 다음 DISPLAY=:0
로컬 컴퓨터에 대한 인증 정보를 표시하십시오 .
$ xauth list :0
ohzd/unix:0 MIT-MAGIC-COOKIE-1 a86982ddce0c1e1c1a8c5e8b2846e43b
X11 전달없이 원격 시스템에 연결하십시오.
$ ssh user@hzy64
user@hzy64's password:
[motd snipped]
를 통해 명령 행을 열고 ~C
포트 6000+43
에서 디스플레이에 해당하는 유닉스 소켓 으로 원격 전달을 추가하십시오 :0
.
hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.
$DISPLAY
envvar을 설정하고 로컬의 인증 정보를 원격 시스템에 추가하십시오.
hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth: file /home/user/.Xauthority does not exist
이제 준비가되었습니다 :
hzy64$ xterm
[1] 잘못된 버그 수정으로 인해 데비안에서는 사용자 기반 액세스 제어가 기본적으로 켜져 /etc/X11/Xsession.d/35x11-common_xhost-local
있습니다. 게다가 XWayland는 기본적으로 유일하게 전원을 끌 수없는 곳이기도 합니다 . X11 프로토콜의 프록시 (예 xscope
:)가 X11 서버에 대한 틈새 구멍을 열지 않는 한 자체 x11 인증 쿠키 검사 (ssh의 방식)를 수행해야합니다.