8

Я пытаюсь перенаправить свой порт 8085, который является портом прямой трансляции камеры для мини-http-сервера, на удаленный сервер.

Моя команда, которую я использую, выглядит так:

ssh -R $rport:dc-bb7925e7:$camport -p 25 server@192.168.178.20

Поскольку эта команда прямо сейчас, она перенаправляет порт, и я могу видеть живой поток на удаленном сервере, перейдя на localhost:8085, НО проблема в том, что на клиенте есть открытый сеанс TTY, который предотвращает все дальнейшие сценарии от бега.

Поэтому я попытался использовать SSH в фоновом режиме с:

ssh -Nf -R $rport:dc-bb7925e7:$camport -p 25 server@192.168.178.20

Это не работает, как будто соединение закрыто. Переадресация портов используется в сценарии, где сценарий оценивает условие if/then/else и затем выполняет его для пересылки. Переадресация этого порта не предназначена для остановки всех других сценариев. Он должен просто перенаправить порт, а затем двигаться дальше, сохраняя его открытым.

Что я делаю не так или есть другие флаги, которые можно использовать?

3 ответа3

15

Вместо того, чтобы справляться с активным TTY, вы можете просто позволить SSH позаботиться обо всем самостоятельно.

Мое предложение таково:

ssh -fNT -R $rport:dc-bb7925e7:$camport -p 25 server@192.168.178.20

Первые три варианта:

  -f    Requests ssh to go to background just before command execution.
  -N    Do not execute a remote command.
  -T    Disable pseudo-tty allocation.

Опция -f на самом деле является фоном, но -N и -T сохранят ресурсы, которые вам не нужно выделять для сеанса SSH, единственной целью которого является перенос вашего туннеля.

Также обратите внимание, что некоторые из этих опций могут быть добавлены в пользовательский профиль в вашем файле ~/.ssh/config , если вы считаете, что было бы предпочтительнее поместить больше статической конфигурации в файлы статической конфигурации, а не в сценарии. Параметр файла конфигурации RemoteForward эквивалентен параметру командной строки -R .

Смотрите также: https://unix.stackexchange.com/a/46271

1

-N не фон, это не удаленная команда. Вы хотите что-то вроде:

ssh -R $rport:dc-bb7925e7:$camport -p 25 server@192.168.178.20&

Обратите внимание на конечный амперсанд, который будет задним фоном команды.

Вы, вероятно, захотите написать некоторую логику, чтобы вернуться и закрыть сеанс SSH, когда вы закончите.

1

Это работает даже на Mac

ssh -o ControlPersist=yes -fNT -L 9022:10.0.20.1:22 root@dc1.corsoscookies.com

И да, вы можете использовать & с этим, и он не будет зависать в фоновом режиме.

Джон Нелли: Мне пришлось добавить -o ControlPersist = yes, чтобы предотвратить закрытие соединения. Это связано с моим ControlMaster = auto в моей ~/.ssh/config

Это был бы способ связать несколько SSH-соединений и пересылок с помощью одной строки или сценария bash.

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