У меня есть 3 сценария оболочки, каждый из которых содержит цикл while true и "вызывает" домой, чтобы открыть обратный туннель ssh. Туннели работают.
Я погуглил, но не уверен, что для этого подойдет. Меня больше всего беспокоит то, что цикл в сценарии вместо этого заблокирует загрузку и запустит и забудет.
В настоящее время у меня нет физического доступа к удаленному компьютеру, поэтому я не могу поиграть, чтобы проверить, работает ли он, мне нужно что-то, что воля работать, и продолжайте работать.
Я надеюсь, что ответ на этот вопрос является пошаговым руководством, поскольку я не очень уверен, что могу возиться с вещами, необходимыми для того, чтобы это работало.
Раньше вы могли поместить вызов каждого из этих сценариев в запись respawn в нижней части / etc / inittab и покончить с этим. Просто. Но с тех пор, как Debian перешел на использование выскочки вместо init и отказался от inittab, ситуация стала более сложной и хрупкой. Вам нужно будет написать файл конфигурации выскочки; они находятся в / etc / init, и в них легче ошибиться.
Что вы можете сделать, так это grep через содержимое / etc / init / * в поисках существующих конфигураций, которые используют ключевое слово respawn и запускают некоторый сетевой демон - в них уже должны быть указаны зависимости, которые гарантируют, что сеть уже работает. Скопируйте и измените один из них для каждого из ваших туннелей. По соглашению ваши собственные конфигурации должны быть помещены в / etc / init / local / *. Возможно, вам удастся устранить некоторую хрупкость, запустив туннели раньше во время загрузки и просто позволив им зависнуть, умереть, истечь время ожидания или что-то еще, когда сеть еще не работает. «Возрождение» в конечном итоге возродит их, возможно, по истечении более длительного времени, если они повторили попытку слишком много раз раньше.
Пока вы используете респаун, вы относительно безопасен от зависания процесса загрузки - но с выскочкой все возможно; его повышенная гибкость означает, что ошибки конфигурации могут привести к зависанию загрузки менее чем очевидным образом; визуальный осмотр уже не так надежен, как это было с inittab.
Кстати, вам, вероятно, не нужны эти скрипты while true. Я обычно использую autossh для запуска и управления туннелями такого типа. Он обычно более надежен, чем обычный сценарий, и команду autossh можно поместить непосредственно в файл конфигурации / etc / init.
Я не решаюсь дать вам пример файла конфигурации, потому что конфигурации выскочки могут быть достаточно разными, так что то, что работает для меня, может не сработать для вас (большая часть этой хрупкости). Но вот одна из моих конфигураций autossh - она может входить, скажем, в /etc/init/local/autossh-example.conf. Вы заметите, что я явно не заявляю о какой-либо зависимости от какой-либо настройки сети - я ожидаю, что «респаун» вызовет повторные попытки, пока сеть не появится. Вы захотите протестировать это локально на идентичной машине, прежде чем доверять ей на своей удаленной машине:
start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]
respawn
exec /usr/bin/autossh -R 20042:127.0.0.1:22 -N foo.example.com