Я хочу создать переадресацию портов с помощью опции ssh
-L
. У меня проблема в том, что я использую общий доступ к удаленному хосту. Поэтому в зависимости от того, имеется ли уже соединение, предоставляющее мастер, мне нужно либо
ssh -O forward -L ... $remotehost
(если мастер уже есть), либо
ssh -N -L ... $remotehost
. Я мог бы использовать что-то вроде:
if ssh -O check $remotehost 2>/dev/null; then
ssh -O forward -L ... $remotehost
else
ssh -N -L ... $remotehost
fi
, но это просто, и из кода C было бы проще, если бы была опция, которая заставляет ssh
автоматически запускать мастер, если его еще нет. Для «обычных» вызовов вы можете использовать -o "ControlMaster auto"
, но здесь это не так. Однако я не могу найти такую опцию в документации и задаюсь вопросом, пропустил ли я что-то.
Итак, мой вопрос: есть ли команда catch-all, которая добавляет порт вперед независимо от настроек мультиплексирования команд, это может даже работать, если мультиплексирование вообще не включено.
ssh -N -L ... $remotehost
, похоже, вообще ничего не делает, если используется уже установленное соединение. Это ошибка?
(Конечно, ssh -S none -N -L ... $remotehost
работает, но очевидным недостатком является то, что, возможно, уже существующее соединение не используется).