Как выбрать незанятый remote port для «ssh -R»
Думается мне, что без костылей это не решается…
Так что вариант у меня только один — писать скрипт:
1 — генерим случайное число
2 — по ssh лезем и netstat (sockstat в случае FreeBSD) проверяем свободен ли порт
3 — анализируем результат, если порт свободен, то запоминаем
4 — проводим аналогичную процедуру (п. 1-3) для локального порта
5 — выполняем ssh подключение с port forwarding
6 — сообщаем какие порты были задействованы
ssh -R 0 помогает, но как выяснилось, не все SSH-сервера разрешают подключаться к remote port из вне, поэтому FTP сервер не может соединиться к remote port (и FTP сервер не поддерживает пассивный режим). Вывод: общую задачу по работе с FTP через SSH не решить. В частном можно. В моем случае оказалось достаточно команды STAT, которая показывает список файлов в папке без создания канала передачи данных, в отличии от команды LIST, которая делает тоже самое, но пытается создать канал передачи данных.