У меня есть устройство с прерывистой связью, которое «звонит домой», чтобы открыть обратный туннель, чтобы я мог подключиться к нему по 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
при разрыве соединения.