Автоматически завершать неактивные SSH-сессии в CentOS 7

Вопрос или проблема

Временами и по разным причинам PyTTY теряет соединение с SSH-сеансами на моем сервере CentOS 7 (PuTTY имеет ошибки, SSH-сервер имеет ошибки, роутер перезагружен, соединение разорвано, кабель выдернут и т.д.). Эти заброшенные сеансы являются бременем для сервера и потребляют ресурсы. Можно ли настроить SSH-сервер CentOS 7 так, чтобы он автоматически завершал любой SSH-сеанс через 24 часа, независимо от цели и состояния сеанса?

Почему независимо от цели и состояния сеанса? Потому что, на мой взгляд, иногда трудно отличить нормальный сеанс от заброшенного сеанса.

Прежде всего, не используйте CentOS 7. У него конец поддержки.

Во-вторых, прочитайте man sshd_config:

ClientAliveCountMax
Устанавливает количество сообщений о «живости» клиента, которые могут быть отправлены без того, чтобы sshd(8) получил от клиента какие-либо сообщения. Если этот порог будет достигнут во время отправки сообщений о «живости» клиента, sshd отключит клиента, завершив сеанс. Важно отметить, что использование сообщений о «живости» клиента очень отличается от TCPKeepAlive. Сообщения о «живости» клиента отправляются через зашифрованный канал и, следовательно, не могут быть подделаны. Опция TCP keepalive, включенная TCPKeepAlive, может быть подделана. Механизм «живости» клиента полезен, когда клиент или сервер зависят от знания о том, когда соединение стало неотзывчивым.

ClientAliveInterval
Устанавливает интервал тайм-аута в секундах, по истечении которого, если данных от клиента не получено, sshd(8) отправит сообщение через зашифрованный канал с запросом ответа от клиента. По умолчанию равно 0, что указывает на то, что эти сообщения не будут отправлены клиенту.

Установив их, например, на 3 и 600 соответственно, сеансы будут завершаться через 3*600 секунд, когда TCP-сеанс будет мертв.

Ответ или решение

Чтобы автоматически завершать заброшенные SSH-сессии на сервере CentOS 7, вы можете настроить конфигурацию SSH-сервера. Это не только упростит администрирование, но и улучшит использование системных ресурсов. Ниже представлен подробный алгоритм для достижения этой цели, основанный на параметрах конфигурации sshd.

Шаг 1: Откройте конфигурационный файл sshd_config

Начните с открытия конфигурационного файла для SSH-сервера. Обычно он находится по пути /etc/ssh/sshd_config. Для редактирования этого файла используйте текстовый редактор, например vi или nano:

sudo vi /etc/ssh/sshd_config

Шаг 2: Настройка параметров ClientAlive

Необходимо установить параметры ClientAliveInterval и ClientAliveCountMax, чтобы управлять временем ожидания и количеством попыток проверки ответа от клиента.

  • ClientAliveInterval: этот параметр устанавливает интервал времени в секундах, после которого сервер отправляет сообщение клиенту, запрашивая ответ. Если клиент не отвечает, сервер ожидает, пока не достигнет максимального числа попыток.

  • ClientAliveCountMax: этот параметр определяет количество раз, которое сервер будет пытаться получить ответ от клиента до отключения сессии. Если это значение достигнуто, сессия будет завершена.

Для того чтобы автоматизировать завершение сессий после 24 часов (или 86400 секунд), вы можете использовать следующие значения для этих параметров:

ClientAliveInterval 600
ClientAliveCountMax 144

Данная конфигурация означает, что сервер будет отправлять запросы на ответ каждые 600 секунд (10 минут), и если клиент не ответит в течение 144 попыток, сессия завершится. Таким образом, инициируется отключение сессии, если клиент не отвечает в течение 24 часов.

Шаг 3: Сохраните изменения и перезапустите SSH-сервер

После внесения изменений в конфигурацию, сохраните файл и закройте редактор. Затем перезапустите SSH-сервер, чтобы применить новые настройки:

sudo systemctl restart sshd

Шаг 4: Проверка конфигурации

Для уверенности, что настройки применились, вы можете использовать следующие команды, чтобы проверить статус SSH-сервера:

sudo systemctl status sshd

Так вы убедитесь, что сервер работает корректно без ошибок.

Заключение

С помощью приведенных выше шагов, вы сможете автоматически завершать заброшенные SSH-сессии на сервере CentOS 7. Это обеспечит более рациональное использование ресурсов и повысит безопасность системы. Если у вас возникнут дополнительные вопросы или потребуется более сложная конфигурация, не стесняйтесь обращаться за помощью.

Примечание

Не забывайте, что CentOS 7 достиг стадии окончания службы (EOL), и рекомендуется рассмотреть возможность перехода на более современные версии дистрибутивов, такие как CentOS 8 Stream или другие альтернативы, чтобы обеспечить дополнительную поддержку и безопасность.

Оцените материал
Добавить комментарий

Капча загружается...