Вопрос или проблема
Я внес изменения в файл sshd_config и, следовательно, мне нужно перезапустить ssh. Я ищу советы о безопасной перезагрузке ssh, когда физический доступ к серверу будет большой проблемой.
Перезапуск sshd во время входа по ssh не отключит ваше ssh-соединение.
Если вы беспокоитесь о своей конфигурации, войдите несколько раз по ssh и перезапустите. Если вы больше не можете подключиться по ssh с новыми соединениями, у вас теперь есть доступ для устранения проблем.
Упомянуто ниже в комментарии @Milan Babuškov: sshd -t
проверит вашу конфигурацию на синтаксическую корректность, если вы действительно хотите быть уверены.
Еще одно предложение от @Ronald Pottol заключалось в том, чтобы настроить задачу cron
для перезапуска сервера с известной рабочей конфигурацией. Возможно, это избыточно, но если вы обновляете сервер критичен для миссии и т.д., иногда никогда не бывает слишком осторожным.
Если у вас есть доступ к оборудованию, вы можете рассмотреть возможность подключения терминала к последовательному порту /dev/ttyS0. Тогда вы сможете получить скрытый доступ к своему серверу.
Просто добавьте
SO:2345:respawn:/sbin/mingetty ttySO
в ваш /etc/inittab, и терминал будет запущен через ваш последовательный порт. Вы можете использовать концентратора последовательного порта или воспользоваться нулевым модемом от ближайшего сервера.
Или используйте задачу cron или at, чтобы снова его запустить, если вам не везет?
Не беспокойтесь, ваша текущая сессия не будет отключена, даже если возникнет проблема с новой конфигурацией.
После применения новой конфигурации и перезапуска sshd просто попробуйте войти несколько раз и посмотрите в журналы, чтобы узнать, все ли в порядке.
Разве вы не можете просто выполнить kill -HUP по PID службы SSH? Это не чисто, но это работает.
Я бы не рекомендовал перезапускать/перезагружать SSHD при подключении по ssh. Я видел много случаев, когда sshd просто не запускается из-за синтаксической ошибки в sshd_config.
Даже если с файлом конфигурации все в порядке, это рискованно.
Я обнаружил, что в наши дни sshd
не отключает ваши сессии при перезапуске, особенно когда это дистрибутив на основе Redhat. Вы всегда можете написать небольшой скрипт, который автоматически восстановит вашу конфигурацию sshd
из резервной копии и перезапустит sshd
через 5 минут в качестве задачи cron
или at
. Это гарантирует, что даже если вы будете отключены, вы сможете вернуться на свой сервер хотя бы.
В моей старой встроенной системе нет pgrep, но я смог использовать комментарий Тома Хейла для перезапуска sshd без потери соединения через:
kill -HUP $(ps -fax | grep '/usr/sbin/sshd' | grep -v grep | awk '{print $1}')
Ответ или решение
Безопасная перезагрузка SSH на удаленном сервере
При обновлении конфигурации SSHD на сервере, к которому у вас есть доступ только по SSH, необходимо предпринять некоторые меры предосторожности, чтобы избежать потери доступа к системе. Следующие рекомендации помогут вам безопасно выполнить перезагрузку SSH:
1. Проверка конфигурации
Перед перезагрузкой SSHD обязательно проверьте синтаксис вашего файла конфигурации sshd_config
. Это можно сделать с помощью команды:
sshd -t
Если вы увидите ошибки, вам нужно исправить их прежде, чем продолжить.
2. Тестовые подключения
Логин в систему через SSH несколько раз. Это поможет убедиться, что у вас есть возможность повторного подключения после перезагрузки SSHD. Запишите количество открытых сессий для уверенности.
3. Перезагрузка SSHD
Существует несколько способов безопасно перезапустить SSHD:
- Используйте команду для отправки сигнала HUP существующему процессу SSHD:
kill -HUP $(pgrep sshd)
или, если pgrep
недоступен:
kill -HUP $(ps -fax | grep '/usr/sbin/sshd' | grep -v grep | awk '{print $1}')
- В большинстве современных систем с
systemd
вы можете использовать:
sudo systemctl restart sshd
4. Создание резервного варианта конфигурации
Перед внесением изменений в конфигурацию SSHD, создайте резервную копию вашего текущего файла sshd_config
:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Если возникнут проблемы после перезагрузки, вы можете быстро восстановить предыдущую конфигурацию.
5. Использование планировщика задач
Для большей уверенности вы можете настроить задачу планировщика, например, с помощью cron
, для автоматического восстановления конфигурации через определенное время:
echo "5 * * * * root cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config && systemctl restart sshd" >> /etc/crontab
Эта команда восстановит вашу резервную конфигурацию через 5 минут после перезагрузки, если вы потеряете доступ.
6. Подключение через последовательный порт
Если сервер поддерживает подключение через последовательный порт, вы можете подключить терминал и настроить /etc/inittab
для создания альтернативного доступа:
SO:2345:respawn:/sbin/mingetty ttyS0
Это даст вам возможность иметь доступ к серверу в случае сбоя SSHD.
7. Проверка логов
После перезагрузки SSHD выполните несколько тестовых подключений и проверьте логи (/var/log/auth.log
или /var/log/secure
) на наличие ошибок, чтобы убедиться, что служба работает корректно.
Заключение
Соблюдение вышеуказанных рекомендаций обеспечит безопасность вашего SSH подключения при изменении конфигурации. Всегда помните о возможности сбоя доступа, поэтому рекомендуется применять методы резервирования и проверки конфигурации до перезагрузки. Настойчивость в вопросах безопасности и доступности позволяет избежать неожиданных ситуаций в управлении системами.