После того, как мне удалось убить sshd на удаленном компьютере (запустив сценарий, который использовал всю доступную память на машине, упс ...), к которому у меня нет доступа, кроме посещения хостинга для [1], я рассматривал способы обеспечения что sshd всегда работает.
Помимо хакерского задания cron для перезапуска sshd каждые n минут или часов, использование inittab для запуска init для поддержания работы sshd кажется хорошей идеей.
Есть ли у такого подхода недостатки? Казалось бы, что-то, что было бы разумно для дистрибутивов Linux делать по умолчанию, поскольку sshd часто является единственным доступным методом доступа для машины.
Кроме того, есть ли другие демоны, для которых я должен использовать этот подход? Может быть, агент мониторинга, такой как nrpe для nagios?
[1] Да, карты управления или сетевой выключатель питания были бы хорошей идеей, но в то время они считались «ненужными» ...
Есть несколько реализаций этой идеи. Выскочка используется Ubuntu и может перезапускать службы, если они умирают, Solaris 10 имеет Служба управления услугами, запустить его является кроссплатформенным, и, как уже упоминалось, есть daemontools.
вы можете сказать linux OOM killer не убивать sshd, google для oom_adj для получения более подробной информации или посмотреть, например, здесь руководство rhel
Я не могу думать ни о какой другой причине не Для выполнения работы с inittab перезапуск sshd после обновления немного более неудобен.
Кроме этого: интересная идея.
Интересная идея.
Я ничего подобного не пробовал, но проверю, в какое время в процессе загрузки запускаются вещи из inittab. Если еще слишком рано, у вас может не работать сеть.
Есть преимущества в наличии сервисов, которые должны быть надежными в рамках схемы, гарантирующей их постоянную работу. Я предпочитаю использовать daemontools лично по причинам, описанным здесь: http://cr.yp.to/daemontools/faq/create.html
Я не запускал ssh таким образом, но я был бы достаточно счастлив, если бы оказался в ситуации, когда я думал, что мое текущее управление SSH не будет работать. Что касается вашей проблемы «нехватки памяти», вы можете лишить приоритета определенные процессы, такие как sshd, чтобы они не были убиты убийцей OOM, в пользу программы, действительно вызывающей проблему.
Монит это демон мониторинга, который предназначен именно для того, что вы хотите здесь делать.
Единственная проблема, которую я могу предвидеть, - это попытка возрождения с ошибкой конфигурации.
Я думал, что вы можете ограничить респавн по скорости, но я не могу найти никакой документации, подтверждающей это.
Как уже отмечалось до меня, использование существующего инструмента, такого как daemontools или monit, вероятно, будет самым разумным путем. Вы не можете использовать inittab для создания sshd, поскольку он разветвляется в фоновом режиме, и init попытается запустить несколько sshd. Скорее всего, вы получите сообщение "init: re-spawning too fast".
Возможно, вы захотите написать небольшой сценарий мониторинга, который будет запускаться в цикле и убедиться, что исходный sshd (тот, который принимает соединения и вилки для обработки сеансов) все еще работает. В случае сбоя просто используйте системный сценарий инициализации, чтобы повторно запустить его.
Просто примечание: если ваш sshd убит обработчиком OOM ядра, нет никакой гарантии, что ваш sshd выживет после перезапуска ...