Як увімкнути пересилання SSH X11 через додатковий сервер?


33

У мене є хости A, B і C. З хоста AI можна отримати доступ через ssh лише B. З BI можна отримати доступ до C. Я хочу мати змогу запускати програми X11 на C і пересувати вперед на A.

Я спробував це:

$ Ssh -XB
B $ ssh -XC
C $ x годин
Помилка: не вдається відкрити дисплей:

Але це не працює.

Відповіді:


25

Існує кілька способів зробити це, я вважаю за краще переслати 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 для простоти.


3
не точно ... якщо X11Forwarding не включений на сервері C, він не працюватиме. він також не працюватиме, якщо не встановити AllowTcpForwarding так і GatewayPorts так на сервері B. ця відповідь взагалі не прийнятна
asdmin

Ви добре зазначаєте, що я цього не помічав, оскільки використовую debian, на якому X11Forwarding та AllowTcpForwarding включені за замовчуванням. GatewayPorts не потрібен, оскільки після його відключення SSH все ще слухає localhost і саме до цього ми підключаємось. Вам це знадобиться лише в тому випадку, якщо ви хочете здійснити друге підключення через зовнішній IP для машини А.
Дейв

На кроці 1 він не запитав мене для пароля хоста B, і я в кінцевому підключенні підключився до хоста C. В іншому вікні я спробував крок 2, і я отримав "ssh_exchange_identification: З'єднання закрите віддаленим хостом".
msb

ssh: підключитися до хоста ... порт 22: Підключення відмовлено під час виконання першої команди
Родріго

7

Це легко зробити за допомогою переадресації портів:

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

Портальний локальний хост: 2022 пересилається до С: 22 через B SSH до C через localhost: 2022 Використовуйте X як звичайне


2
Це не працюватиме з тих самих причин, що зазначені в іншому випадку, якщо в B (шлюзі) не включені правильні параметри переадресації sshd.
g33kz0r

не запитував мій пароль для хосту B, що дивно; і це не спрацювало, я отримав повідомлення про помилку "канал 2: відкрито не вдалося: адміністративно заборонено: відкрито не вдалося ssh_exchange_identification: З'єднання закрите віддаленим хостом"
msb

4

Припустимо, що проблема полягає в тому, що на середній машині немає X, але він інакше налаштований для пересилання X11, просто встановіть xauth.

за системою на основі ням (Fedora, Redhat, Centos):

B$ sudo yum install xauth

в підходящій системі (debian, ubuntu):

B$ sudo apt-get install xauth

Так, ідеально підходить для головної малини пі.
cmc

@cmc або використовуючи ssh як vpn.
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

Ви не можете переслати X11-дисплей, якщо у вас відключений X11Forwarding в будь-якому sshd, який ви використовуєте.

man sshd_config:

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

Ви повинні переконатися, що X11Forwarding увімкнено у пункті призначення та всі проміжні sshds, які ви використовуєте.

Лише невеликий натяк: ви повинні спробувати використовувати VNC, переадресація дисплея X11 досить велика.


Пропозиції @ AgentK та @ dave вимагають включення X11Forwarding лише на кінцевому хості, оскільки вони використовують тунель SSH для обходу проміжного хоста. Ваша пропозиція майже напевно, чому метод ОП спочатку не вдався, але це не означає, що відповіді інших людей "неприйнятні"
Даніель Лоусон,

їх відповіді були несправними і виправили проблему, не вирішивши її. правильна та корисна відповідь розглядала б оригінальне питання та вирішує його, та надає інші способи лише у випадку, якщо оригінальне запитання не вирішується. до речі, жоден з них не згадував X11Forwarding, що є суттєвим
0909

У деяких системах за замовчуванням є " yes".
Бред Гілберт

Я перевірив, що на B і C увімкнено X11Forwarding, а AllowTcpForwarding встановлено на "Так" на B. Але результат моїх команд той самий. І відповідь Дейва для мене добре працює.
lexsys

то зробіть це, але це лише засіб. ви також можете запустити ssh з параметром '-v' або спробувати echo $ DISPLAY всі вкладені команди ssh, щоб дізнатися, де загубиться $ DISPLAY
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
Родріго
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.