Назад | Перейти на главную страницу

Как включить перенаправление SSH X11 через дополнительный сервер?

У меня есть хосты A, B и C. С хоста A я могу получить доступ только через ssh B. Из B я могу получить доступ к C. Я хочу иметь возможность запускать программы X11 на C и пересылать отображение на A.

Я пробовал это:

A$ ssh -X B
B$ ssh -X C
C$ xclock
Error: Can't open display:

Но не работает.

Есть несколько способов сделать это, я предпочитаю перенаправить порт ssh:

Сначала подключитесь к машине B и перенаправьте [localPort] на C: 22 через B

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

Затем подключитесь к C из A через этот недавно созданный туннель, используя [localPort], перенаправляя X11

A$ ssh -X -p [localPort] localhost

Теперь мы можем запускать программы X11 на C и отображать их на A

C$ xclock

[localPort] может быть любым портом, который вы еще не слушаете на A, я часто использую 2222 для простоты.

Это легко сделать с помощью переадресации портов:

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

Порт localhost: 2022 перенаправляется на C: 22 через B SSH на C через localhost: 2022 Используйте X как обычно

Предполагая, что проблема в том, что на среднем компьютере нет X, но он настроен на пересылку X11, просто установите xauth.

в системе на основе yum (fedora, redhat, centos):

B$ sudo yum install xauth

в системе на основе apt (debian, ubuntu):

B$ sudo apt-get install xauth

Для более новых версий opensshd необходимо отключить X11UseLocalhost чтобы это работало.

Вам нужно сделать это на хосте C. /etc/ssh/sshd_config и перезапустите sshd, чтобы это сработало:

X11Forwarding yes
X11UseLocalhost no

Вы пробовали с

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

Флаг -Y «Включает надежную пересылку X11».

Вы не можете перенаправить отображение X11, если у вас отключена X11Forwarding в любом используемом sshd.

человек sshd_config:

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

Вы должны убедиться, что X11Forwarding включен в пункте назначения и все промежуточные sshds, которые вы используете.

Небольшая подсказка: вы должны попробовать использовать VNC, переадресация дисплея X11 требует значительных затрат полосы пропускания.

Если вы часто переходите от A к C, вы можете настроить B как прокси:

A:~/.ssh/config:

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

тогда это просто:

A$ ssh C xclock

Вы можете комбинировать команду -Y / -X с параметром командной строки -J:

A$ ssh -Y user@C -J user@B
C$ xclock

Если у вас больше хостов, чем нужно сделать следующее:

A$ ssh -Y user@C -J user@B,user@D,...,user@Z
C$ xclock

От человека ssh:

-J [user@]host[:port]
     Connect to the target host by first making a ssh connection to
     the jump host and then establishing a TCP forwarding to the
     ultimate destination from there.  Multiple jump hops may be
     specified separated by comma characters.  This is a shortcut to
     specify a ProxyJump configuration directive.

Он был представлен в OpenSSH версии 7.3 (выпущен в августе 2016 года).