추가 서버를 통해 SSH X11 전달을 활성화하는 방법은 무엇입니까?


32

호스트 A, B 및 C가 있습니다. 호스트 AI에서 ssh 만 B를 통해 액세스 할 수 있습니다. BI에서 C에 액세스 할 수 있습니다. C에서 X11 프로그램을 실행하고 A로 디스플레이를 전달할 수 있기를 원합니다.

나는 이것을 시도했다 :

A $ ssh -XB
B $ SSH -XC
C $ xclock
오류 : 디스플레이를 열 수 없습니다 :

그러나 작동하지 않습니다.

답변:


24

이 작업을 수행하는 몇 가지 방법이 있습니다. 내가 선호하는 방법은 ssh 포트를 전달하는 것입니다.

먼저 머신 B에 연결하고 B를 통해 [localPort]를 C : 22로 전달하십시오.

A$ ssh -L [localPort]:C:22 B

그런 다음 [localPort]를 사용하여 X11을 전달하여 새로 생성 된이 터널을 통해 A에서 C로 연결하십시오.

A$ ssh -X -p [localPort] localhost

이제 C에서 X11 프로그램을 실행하고 A에 표시 할 수 있습니다.

C$ xclock

[localPort]는 아직 A에서 듣지 않는 포트 일 수 있습니다. 간결성을 위해 종종 2222를 사용합니다.


3
정확히 ... 서버 C에서 X11Forwarding이 활성화되어 있지 않으면 작동하지 않습니다. 서버 B에서 AllowTcpForwarding을 yes로 설정하고 GatewayPorts를 yes로 설정하지 않으면 작동하지 않습니다.이 답변은 전혀 허용되지 않습니다
— asdmin

X11Forwarding과 AllowTcpForwarding이 기본적으로 활성화되어있는 데비안을 사용하기 때문에이 점을 눈치 채지 못했습니다. GatewayPorts는 비활성화되어있을 때 SSH가 여전히 로컬 호스트에서 수신 대기하므로 이것이 바로 연결되는 포트이므로 필요하지 않습니다. 머신 A의 외부 IP를 통해 두 번째 연결을하려는 경우에만 필요합니다.
— dave

1 단계에서 호스트 B의 암호를 묻지 않았고 호스트 C에 연결되었습니다. 다른 창에서 2 단계를 시도했는데 "ssh_exchange_identification : Connection closed by remote host"가 나타납니다.
— msb

ssh : 호스트에 연결 ... 포트 22 : 첫 번째 명령을 실행하는 동안 연결이 거부되었습니다
— Rodrigo

7

포트 포워딩을 사용하면 쉽게 달성 할 수 있습니다.

A$ ssh -NL 2022:C:22 B &
A$ ssh -X -p 2022 localhost
C$ xclock

localhost : 2022 포트는 B SSH를 통해 C : 22로 전달되고 localhost : 2022를 통해 C로 전달됩니다.


2
B (게이트웨이)에서 올바른 sshd 전달 옵션을 사용할 수없는 경우 다른 곳에 언급 된 것과 동일한 이유로 작동하지 않습니다.
— g33kz0r

호스트 B에게 내 비밀번호를 요청하지 않았습니다. 이상합니다. 작동하지 않으면 "채널 2 : 열지 못했습니다 : 관리 상 금지됨 : 열지 못했습니다 ssh_exchange_identification : 원격 호스트에서 연결을 닫았습니다"라는 오류 메시지가 표시됨
— msb

4

문제는 중간 시스템에 X가 없지만 X11 전달을 허용하도록 구성된 경우 xauth를 설치하는 것입니다.

m 기반 시스템 (fedora, redhat, centos)에서 :

B$ sudo yum install xauth

apt 기반 시스템 (debian, ubuntu)에서 :

B$ sudo apt-get install xauth

헤드리스 라즈베리 파이에 적합합니다.
— cmc

@cmc 또는 VPN처럼 ssh 사용.
— Jayen

@cmc 당신은 yum파이에 있습니까?
— Jayen

nope-sudo apt-get install xauth
— cmc

3

최신 버전의 opensshd X11UseLocalhost에서는이 기능이 작동 하지 않도록 설정 해야합니다.

호스트 C /etc/ssh/sshd_config에서이 작업을 수행하고 sshd를 다시 시작해야 작동합니다.

X11Forwarding yes
X11UseLocalhost no

2

사용중인 sshd에서 X11Forwarding을 비활성화 한 경우 X11 디스플레이를 전달할 수 없습니다.

남자 sshd_config :

X11Forwarding
  Specifies whether X11 forwarding is permitted. The argument must be “yes”
  or “no”.  The default is “no”.

대상 및 사용 중인 모든 중간 sshd 에서 X11Forwarding이 활성화되어 있는지 확인해야 합니다.

작은 힌트 : VNC를 사용하려고하면 X11 디스플레이 전달은 대역폭을 많이 소비합니다.


@AgentK 및 @dave의 제안은 SSH 호스트를 사용하여 중간 호스트를 무시하므로 최종 호스트에서 X11Forwarding 만 활성화하면됩니다. OP의 방법이 처음에 실패한 이유는 거의 확실하지만 귀하의 제안은 다른 사람들의 답변이 "허용되지 않는다"는 의미는 아닙니다.
— Daniel Lawson

그들의 답변은 결함이었고 문제를 해결하지 않고 해결했습니다. 옳고 유용한 답변은 원래 질문을 고려하고 해결하며, 원래 질문을 해결할 수없는 경우에만 다른 방법을 제공 합니다.
— 그건 그렇고

일부 시스템에서 기본값은 " yes"입니다.
— 브래드 길버트

B와 C에서 X11Forwarding이 활성화되어 있고 B에서 AllowTcpForwarding이 yes로 설정되어 있는지 확인했지만 명령 결과는 동일합니다. 그리고 데이브의 대답은 나에게 잘 작동합니다.
— lexsys

그런 다음 해결 방법입니다. 당신은 또한 ssh를 이용하여 매개 변수 '-v'시작하거나 $ DISPLAY가 분실 곳을 찾아 에코 $ 디스플레이 모든 중첩 된 SSH 명령을 시도 할 수 있습니다
— asdmin

2

A에서 C로 자주 이동하는 경우 B를 프록시로 구성 할 수 있습니다.

A:~/.ssh/config:

Host C
  ForwardX11   yes
  ProxyCommand ssh -W %h:%p B

다음과 같습니다.

A$ ssh C xclock

1

당신이 시도 했습니까

A$ ssh -Y B
B$ ssh -Y C
C$ xlclock

-Y 플래그 "신뢰할 수있는 X11 전달을 활성화합니다."


같은 결과입니다.
— lexsys

이것은 나를 위해 일했지만 X11이 얼마나 느린 지 발견하기 위해서만
— Rodrigo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.