Пересылка X11 через SSH, если конфигурация сервера не позволяет это

10

Рассмотрим ситуацию, когда я выполняю вход по SSH с компьютера A на компьютер B, у меня есть сеанс X на компьютере A, и я хочу запустить программу X на B.

ssh -X Bделает эту работу прозрачно. Но что, если не хватает конфигурации сервера X11Forwarding yes, у меня нет корневых прав на сервере, а администратор сервера безразличен?

Очевидно, что возможно переадресовать соединение X11, поскольку я могу передавать все, что захочу, по каналу SSH. На самом деле, если локальный X-сервер разрешает TCP-соединения, это так же просто ssh -R 6010:localhost:6000(как отрегулировать для отображаемых номеров). Как насчет общего случая, когда локальный X-сервер разрешает только сокет-соединения? Как сделать переадресацию X удобно и безопасно с минимальными требованиями к установке (особенно на B)?

Жиль "ТАК - перестань быть злым"
источник

Ответы:

2

Ответ @Demi хорош, но я думаю, что заполнить его было бы очень полезно.

  • local - локальная машина, обслуживающая Xserver.
  • remote - удаленный компьютер, обслуживающий приложение, которое передает данные, идущие на Xserver

Удаленный /etc/ssh/sshd_config:

X11Forwarding no
X11DisplayOffset 10
X11UseLocalhost yes

Пульт ~/.Xauthorityпуст или не существует

По местному:

Xephyr -ac -screen 1280x800 -br -reset   :2 &
DISPLAY=:2 ssh  -fR 6010:/tmp/.X11-unix/X2  user@remote "DISPLAY=:10 xeyes"

В тесте local работал Ubuntu 18.05, удаленный - Debian Jesse.

Крейг Хикс
источник
6

Протокол X11 говорит, когда общение с TCP-портом отличается от разговора с сокетом?

Возможно, вы могли бы объединить предложенное вами собственное использование ssh -R 6010:localhost:6000для передачи данных X11 через переадресацию через порт, а затем соединить локальный пробел между портом tcp и прослушивателем сокетов X11 с помощью nc:

nc -l -p 6000 > /tmp/.X11-unix/X0
Калеб
источник
Да, это идея. Но я надеялся получить ответ: «поместите это на .ssh/configстороне клиента, а на стороне .profileсервера, а затем просто запустите ssh B».
Жиль "ТАК - перестань быть злым"
1
Существует простой ответ «вставьте это в свой конфиг», проблема в том, что вы исключаете это из своих квалификационных вопросов, потому что необходимая опция находится в стороне sshd_config на B. Вы пытаетесь обойти блок, вставленный в место, где трудно непреднамеренно открыть проблему безопасности.
Калеб
3
Я нацеливаюсь на (по моему опыту очень распространенный) случай, когда администратору все равно, и просто оставил настройки по умолчанию на месте. Пересылка X11 не запрещена политикой, это просто неудобство из-за безразличия сисадмина. В любом случае, пересылка X11 позволяет серверу атаковать клиента, поэтому запретить его на стороне сервера не имеет особого смысла.
Жиль "ТАК - перестань быть злым"
@ Жиль Я согласен, что дефолт не защищает от чего-либо полезного. Так стоит ли нам лоббировать, чтобы изменить исходное состояние по умолчанию?
Калеб
Для меня /tmp/.X11-unix/X0это сокет домена unix, а не FIFO, поэтому любая попытка перенаправления заканчивается на ENXIO: No such device.
Самвин
2
  1. Раскрутите дополнительный X-сервер, используя Xephyr. Это для безопасности - это предотвращает компрометацию вашей удаленной системы.

  2. Используйте SSH для пересылки удаленного сокета в сокет Xephyr. SSH также поддерживает пересылку сокетов Unix.

  3. Правильно установите переменные среды на удаленном сервере.

Деми
источник