Переадресация X11 через два SSH-туннеля

Переадресация X11 через два SSH-туннеля

Для работы мне нужно подключиться по ssh с моей локальной машины через машину A, чтобы попасть на машину B. Проблема в том, что на машине A нет переадресации X11, и у меня нет прав суперпользователя, чтобы это изменить. У меня есть права суперпользователя на машине B, и на ней включена переадресация X11.

Есть ли способ переслать X11 из B через A на мою локальную машину, не включая пересылку X11 на A?

Я попробовал запустить ssh -t -X user@A ssh -X user@B, ssh -t user@A ssh -X user@B но Машина А все равно выдает сообщение X11 forwarding request failed on channel 0при входе в систему.

решение1

добавьте это в ваш ~.ssh/config:

Host BviaA
  HostName      hostB
  ProxyCommand  ssh user@hostA nc %h %p 2> /dev/null

Тогда ssh -X user@BviaAдолжно работать.

Обратите внимание, что в разделе конфигурации выше я использовал, Host BviaAчтобы сделать более очевидным, что происходит. Вы также можете использовать, Host hostBчтобы он работал полностью прозрачно: ssh -X user@hostB(Как будто шлюз не нужен.)

Альтернативный вариант в виде однострочного кода для тестирования без каких-либо изменений конфигурации:

ssh -X -oProxyCommand="ssh user@hostA nc %h %p" user@hostB

решение2

Большое спасибо @rudimeier за ваш ответ.

У меня была проблема снквариант при использовании ssh, но этот вариант (основанный на том, что объяснил @aDroidздесь) у меня сработало. Так что это по сути то же самоеоднострочный ответ@rudimeier для более новых версий OpenSSH:

$ ssh -X -oProxyCommand="ssh [email protected] -W %h:%p" [email protected]

@user4556274отвечатьМне тоже помогло (и вам тоже спасибо).

Я бы просто добавил имена пользователей в обоих шагах, чтобы объяснить, как это работает, новичкам вроде меня (после ввода первой команды порт localhost 2222 будет вести себя так, как если бы это был порт 22 на машине B; поэтому во второй команде мы передаем имя пользователя машины B):

$ ssh -Nf -L2222:destination.host-B.address:22 [email protected]
$ ssh -p 2222 -X userB@localhost

решение3

Вы можете иметь возможность переадресации портов через A. Используйте

$ ssh -Nf -L2222:B:22 A

для запуска и фонового процесса ssh, который будет перенаправлять данные с вашей локальной машины на B через A. Затем подключитесь к B с помощью

$ ssh -p 2222 -X localhost

Связанный контент