Как выбрать незанятый remote port для «ssh -R»

Нужно сделать remote port forwarding, т.е. открыть свободный remote port с пробросом его на local port. Но при этом какой-то определенный remote port выбирать нельзя, ибо он может быть уже занят. В идеале было бы сказать ssh открыть свободный remote port, пробросить его на свободный local port, сказать мне какие порты были выбраны, чтобы я смог поднять слушающий local port и сообщить всем о поднятом remote port. Таким образом установилось бы remote port forwarding соединение с динамически выбранными портами.
  • Вопрос задан
  • 4628 просмотров
Пригласить эксперта
Ответы на вопрос 4
Alukardd
@Alukardd
Думается мне, что без костылей это не решается…
Так что вариант у меня только один — писать скрипт:
1 — генерим случайное число
2 — по ssh лезем и netstat (sockstat в случае FreeBSD) проверяем свободен ли порт
3 — анализируем результат, если порт свободен, то запоминаем
4 — проводим аналогичную процедуру (п. 1-3) для локального порта
5 — выполняем ssh подключение с port forwarding
6 — сообщаем какие порты были задействованы
Ответ написан
@den_admin
если не ошибаюсь когда указываешь порт «0» sshd сам выбирает случайный порт и сообщает клиенту.
Ответ написан
vip_delete
@vip_delete Автор вопроса
Java
ssh -R 0 помогает, но как выяснилось, не все SSH-сервера разрешают подключаться к remote port из вне, поэтому FTP сервер не может соединиться к remote port (и FTP сервер не поддерживает пассивный режим). Вывод: общую задачу по работе с FTP через SSH не решить. В частном можно. В моем случае оказалось достаточно команды STAT, которая показывает список файлов в папке без создания канала передачи данных, в отличии от команды LIST, которая делает тоже самое, но пытается создать канал передачи данных.
Ответ написан
Комментировать
@xxqs
Вот тут я описал сценарий, где за каждым клиентским устройством резервируется TCP порт:
txlab.wordpress.com/2012/03/14/improved-call-home-ssh-scripts/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы