У меня есть две машины, m1 и m2, и машина m2 может подключаться к m1 с помощью SSH. Есть машина m1bis, которая может подключаться только к m1, и есть машина m2bis, к которой может подключиться только m2. Я хотел бы, чтобы m1bis мог подключиться к машине m2bis на некотором порту q, подключившись к некоторому порту p машины m1. Допустим, что и p, и q являются непривилегированными портами, т. Е. Они больше 1024. В картинках:
+-------+ q +----+ SSH +----+ p +-------+
| m1bis | ----> | m1 | <------ | m2 | ----> | m2bis |
+-------+ +----+ +----+ +-------+
У меня есть доступ к оболочке m1 и m2. Обычный способ сделать это будет с обратным портом SSH, запустив следующее на m2:
ssh -R *:q:m2bis:p m1
Это заставляет демона SSH на m1 прослушивать порт q на всех интерфейсах и ретранслировать любые входящие соединения на порт p компьютера m2bis. Таким образом, когда m1bis подключается к порту q машины m1, соединение маршрутизируется по SSH от m1 до m2, и соединение фактически происходит через порт p машины m2bis. Все идет нормально.
Проблема заключается в том, что для этого необходимо, чтобы параметр GatewayPorts=yes
был включен в конфигурации сервера SSH на m1. Однако он не включен, и я не являюсь пользователем root на m1, поэтому не могу его включить.
Тем не менее, мне кажется, что на самом деле ничто не мешает мне обойти это и, тем не менее, выполнить переадресацию портов: у меня есть доступ к оболочке m1, я могу иметь SSH-соединение между m1 и m2, я могу запустить процесс на m1, который прослушивает через порт q на всех интерфейсах (вместо прослушивания выполняет демон SSH), который маршрутизирует соединение через SSH. Поэтому, по сути, у меня есть все необходимые разрешения для создания своего собственного порта вперед.
Могу ли я на самом деле сделать это, и есть ли простой способ сделать это?
Дополнительные требования:
- Так как я не root на m1, я бы предпочел решение без сложных зависимостей, в идеале какой-нибудь bash-скрипт с общими утилитами, такими как
netcat
,socat
и т.д., Или какую-то отдельную C-программу. - Я рут на м2, если это помогает (но в принципе я не думаю, что мне это тоже нужно).
- Я не доверяю соединению между m1 и m2, поэтому пересылка должна быть зашифрована между m1 и m2 (т. Е. Она должна действительно передаваться через SSH).