추가 서버를 통해 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.