Держите ssh туннель открытым после запуска скрипта - PullRequest
0 голосов
/ 02 ноября 2019

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

ssh -R 1234:localhost:22 -N tunnel-user@reliable.host

Теперь я хочу запустить скрипт на reliable-host при подключении. Это достаточно просто, просто изменив ssh ... cli: swap -N для имени скрипта на пульте дистанционного управления reliable-host:

ssh -R 1234:localhost:22 tunnel-user@reliable.host ./on-connect.sh

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

Я нашел один обходной путь - поставить длинный sleep в конце моего сценария. Это, однако, оставляет sleep процессов после разрыва соединения, так как sleep не отвечает на SIGHUP. Я мог бы поставить более короткий сон в бесконечный цикл (я думаю), но это кажется счастливым.

~/on-connect.sh

#!/bin/bash

# Do stuff...

sleep infinity

Как я могу получить sshвести себя как -N, так что он остается подключенным без активности, но также запускает сценарий при первоначальном подключении? В идеале, без необходимости иметь специальный sleep (или эквивалентный) в удаленном скрипте, но, если это невозможно, надлежащую очистку reliable-host при разрыве соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...