у меня есть две машины, m1 и m2, и машина m2 может подключаться к m1 с помощью SSH. Есть машина m1bis что вы можете подключить к М1, и есть машина m2bis, к которому можно подключить только м2. Я хотел бы сделать возможным, чтобы 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. So far, so good.
проблема в том, что это требует установления GatewayPorts=yes
быть включенным в конфигурации SSH сервера на m1. Однако он не включен, и я не root на m1, поэтому я не могу его включить.
однако, мне кажется, там ничего особо мешая мне работать вокруг этого и делаю проброс портов не менее: у меня есть Шелл доступ к М1, я могу SSH-подключение между М1 и М2, я могу запустить процесс на М1, который прослушивает порт-Q на все интерфейсы (вместо SSH демон не слушал) и что стороны подключение через SSH. Таким образом, по существу, у меня есть все необходимые разрешения для создания моего собственного порта вперед.
могу ли я сделать это, и есть ли простой способ сделать это?
дополнительные требования:
- поскольку я не root на m1, я бы предпочел решение без сложных зависимостей, в идеале какой-то сценарий bash с общими утилитами, такими как
netcat
,socat
, etc., или какая-то автономная программа на Си. - я корень на м2, если это помогает (Но в принципе я не думаю, что мне это тоже нужно).
- я не доверяю соединению между m1 и m2, поэтому пересылка должна быть зашифрована между m1 и m2 (т. е. она должна действительно идти по SSH).