
Для работы мне нужно подключиться по 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