Делаю SSH с обратной порт вперед без GatewayPorts включено

у меня есть две машины, 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).
25
задан a3nm
17.12.2022 13:48 Количество просмотров материала 3389
Распечатать страницу

2 ответа

решение, которое работает нормально, чтобы запустить свой собственный демон SSH на m1, который выполним без корня. Вот как запустить демон SSH, будучи обычным пользователем.

сначала сгенерируйте ключи хоста:

ssh-keygen -f test_host_rsa -N  '' -t rsa
ssh-keygen -f test_host_dsa -N  '' -t dsa
ssh-keygen -f test_host_ed25519 -N  '' -t ed25519

затем напишите конфигурационный файл для вашего sshd, где 2222-это непривилегированный порт, который не используется на m1 и к которому m2 может подключаться, и где вам также нужно указать абсолютный путь к текущей папке:

cat >sshd_config <<EOF
Port 2222
HostKey /folder/where/the/files/are/test_host_rsa
HostKey /folder/where/the/files/are/test_host_dsa
HostKey /folder/where/the/files/are/test_host_ed25519
GatewayPorts yes

теперь запустите SSH демон:

/usr/sbin/sshd -f sshd_config

теперь m2 может подключаться к порту 2222 m1 и запускать обратный порт вперед, потому что GatewayPorts включен на вашем демоне SSH. Другими словами, на м2 можно запустить:

ssh -p 2222 -R *:q:m2bis:p m1
5
отвечен Mc- 2022-12-18 21:36

друг предложил другое решение: если socat команда установлена на m1, вы можете сделать SSH обратный порт вперед во время прослушивания на адрес замыкания на себя, на какой-то порт q2, то есть, работает следующее на m2:

ssh -R q2:m2bis:p m1

и использовать socat на m1 следующим образом, который будет перенаправлять входящие соединения на порту q к перенаправлению портов, которое слушает адрес обратной связи:

socat tcp-listen:q,reuseaddr,fork tcp:localhost:q2
2
отвечен a3nm 2022-12-18 23:53

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх