ssh
기계 없이도 -X
일부 설정(예: $DISPLAY
)을 변경하여 이와 같이 작동하도록 할 수 있습니까 ssh -X
? 그렇지 않다면 왜 그렇습니까? 감사해요.
답변1
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]
다음을 통해 명령줄을 열고 포트에서 디스플레이에 해당하는 Unix 소켓으로의 원격 전달을 ~C
추가합니다 .6000+43
:0
hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.
환경 변수를 설정 $DISPLAY
하고 로컬에서 원격 시스템으로 인증 정보를 추가합니다.
hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth: file /home/user/.Xauthority does not exist
이제 갈 준비가 되었습니다:
hzy64$ xterm
[1] 그릇된 길로 갔기 때문에버그 수정, Debian에서는 사용자 기반 액세스 제어가 기본적으로 활성화되어 있습니다 /etc/X11/Xsession.d/35x11-common_xhost-local
. 더 나쁜 것은 XWayland에서 기본적으로 사용할 수 있는 유일한 기능이라는 점입니다.닫을 수 없습니다. X11 프로토콜(예: xscope
)을 프록시하는 모든 프로그램은 X11 서버에 취약점을 열려고 하지 않는 한 자체 x11 인증 쿠키 검사(ssh와 마찬가지로)를 수행해야 합니다.