Песочница, позволяющая нескольким процессам открывать один и тот же порт - PullRequest
0 голосов
/ 25 марта 2019

Фон

У меня есть приложение командной строки, которое я использую для подключения к удаленному устройству через порт 1234.Я не могу изменить номер порта, и у меня нет доступа к источнику, чтобы перестроить этот инструмент.В настоящее время я работаю в лаборатории, где все порты, кроме SSH, заблокированы.Чтобы обойти это, я создаю туннель, то есть:

ssh -L 1234:remotehost:1234 sshuser@remotehost

Теперь я могу просто указать моей программе CLI на localhost:1234 для подключения с помощью инструмента CLI к нужному хосту.


Проблема

Этот инструмент CLI должен работать около часа подряд, и у меня есть около 200 удаленных хостов для тестирования с ним.Я хотел бы распараллелить эту задачу.К сожалению, я могу создать только один туннель на моей локальной машине, используя порт 1234.


Вопрос

Существует ли (простой / простой / автоматизированный) способ попасть в тюрьму / песочницумой инструмент CLI, чтобы я мог запускать 100 экземпляров параллельно (т.е. через скрипт оболочки), чтобы каждый экземпляр "думал", что он говорит с портом 1234?Например, Docker или KVM предоставляют какую-то функцию анонимного / по требованию вычислительного узла, которую я мог бы быстро настроить?Я бы предпочел не прибегать к ручному развертыванию и управлению множеством хостов VirtulBox через .

1 Ответ

2 голосов
/ 25 марта 2019

Простой ответ заключается в том, что вы можете использовать несколько IP-адресов локально. Каждый локальный IP-адрес на клиенте позволит вам создать еще один туннель. В настоящее время вы используете localhost. Но у вашего клиента также есть IP-адрес. Вы можете доказать мою точку зрения, попробовав такой синтаксис:

ssh -f -N -L 127.0.0.1:1234:remotehost1:1234 sshuser@remotehost1     # this is default 
ssh -f -N -L <local-IP1>:1234:remotehost2:1234 sshuser@remotehost2  # specifying non-default value <local-IP1>

Теперь вам просто нужно выяснить, как дать вашему клиенту несколько IP-адресов (вторичных адресов). Затем вы можете расширить это за 2 параллельных сеанса.

Я также добавил -f и -N к вашему синтаксису ssh, чтобы поместить ssh в фоновый режим (-f) и не давать никаких команд.

Используя туннели -R в прошлом, я обнаружил, что мне нужно включить GatewayPorts на сервере (/ etc / ssh / sshd_config). В случае -L я не вижу необходимости. Однако на man-странице ssh явно упоминаются GatewayPorts, связанные с функцией -L. Возможно, вам придется немного поиграть. Я только что попробовал это на своем Mac, и я смог запустить его без каких-либо соображений GatewayPorts.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...