`-X`가없는`ssh` 다음에`$ SH`를`ssh -X`처럼 작동하도록 변경할 수 있습니까? (예를 들어 일부 설정을 변경할 수 있습니다

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.

$DISPLAYenvvar을 설정하고 로컬의 인증 정보를 원격 시스템에 추가하십시오.

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의 방식)를 수행해야합니다.