У меня есть хосты 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 года).