1

Команда autossh имеет следующую опцию -M :

   -M port[:echo_port]

specifies the base monitoring port to use. Without the echo port, this port
and the port immediately above it ( port + 1) should be something nothing else
is using. autossh will send test data on the base monitoring port, and receive
it back on the port above. For example, if you specify "-M 20000", autossh will
set up forwards so that it can send data on port 20000 and receive it back on
20001. 

В качестве альтернативы вы можете указать то же поведение, используя переменную среды AUTOSSH_PORT .

Мой вопрос заключается в следующем:

Если не указана ни опция -M ни переменная env, какой порт используется для мониторинга? Или поведение отключено? Документация неясна.

2 ответа2

2

Если не указана ни опция -M ни переменная env, какой порт используется для мониторинга?

В моих нескольких тестах на клиенте Kubuntu случайные высокие порты использовались в диапазоне около (моя оценка) 30000-60000 . Сравните: эфемерный порт . Я имею в виду, что первый (port) был выбран случайным образом, второй был чуть выше него (port+1).

-M без правильного аргумента (autossh -M -- … или autossh -M foo …) завершается немедленно; он не печатает никаких ошибок, но статус выхода равен 1 .

autossh -M 0 … действительно отключает эту функцию.

Но…

Я попытался проанализировать источник и не нашел этой случайности. Тогда я обнаружил это:

$ type autossh
autossh is /usr/bin/autossh
$ file /usr/bin/autossh
/usr/bin/autossh: POSIX shell script, ASCII text executable
$ head -n 4 /usr/bin/autossh
#!/bin/sh
# little wrapper to choose a random port for autossh, falling back to $fallback_port

fallback_port="21021"
$ tail -n 1 /usr/bin/autossh
exec /usr/lib/autossh/autossh "$@"
$ file /usr/lib/autossh/autossh
/usr/lib/autossh/autossh: ELF 64-bit LSB executable, …

Это означает, что в Kubuntu у меня есть оболочка, которая случайным образом выбирает порт, если он не указан ни -M ни AUTOSSH_PORT . Я не публикую здесь полный код, но прочитал его: если оболочка не может случайно попасть в неиспользуемую пару портов (т.е. port и port+1) в 42 попытках, то в конце концов она пытается 21021 и 21022 ; Если эти порты не могут быть использованы, оболочка завершается с ошибкой.

Если обертка завершается успешно, она экспортирует первый порт как AUTOSSH_PORT и запускает настоящий autossh (/usr/lib/autossh/autossh). Этот исполняемый файл требует -M или AUTOSSH_PORT , иначе он не запустится.

Мой последний ответ: нет порта мониторинга по умолчанию для vanilla autossh. Вы должны установить AUTOSSH_PORT или использовать -M . Это неудобно, отсюда и обертка. Вы можете иметь или не иметь его в своем Linux. Возможно, некоторые разновидности Linux используют оболочки, которые устанавливают и используют фиксированный порт по умолчанию.

-1

Это может быть любой неиспользуемый порт в удаленной системе, однако он также должен быть открыт. Тем не менее, я не думаю, что есть какой-то «нормальный» вариант использования для этого, как описано здесь, вы могли бы просто использовать вместо этого собственные опции SSH:

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -L 5000:localhost:3306 user@randomhost.org

Это приведет к «отключению» через 90 секунд после отсутствия ответа от сервера, а затем AutoSSH автоматически подключится.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .