Установка и настройка SSH на Rocky Linux: полное руководство

SSH (Secure Shell) обеспечивает зашифрованный удалённый доступ к серверам Linux, позволяя системным администраторам и разработчикам выполнять команды, передавать файлы и управлять службами безопасно через небезопасные сети. Управляете ли вы одним VPS или целым парком серверов, SSH является основой безопасного удалённого администрирования.

💡 Если вам нужно безопасно управлять сервером удалённо, передавать файлы или выполнять команды на другой машине — SSH предоставит зашифрованное соединение и инструменты для безопасной работы.

В этом руководстве мы установим и настроим OpenSSH на Rocky Linux 8, 9 и 10. Вы узнаете:

  • Как установить SSH-сервер и клиент
  • Как настроить ключевую аутентификацию для повышения безопасности
  • Как настроить файрвол для доступа по SSH
  • Как применить основные параметры hardening (усиления безопасности)

Для кого: сисадмины (удалённое управление серверами), разработчики (доступ к средам разработки), новички (первые шаги в администрировании Linux).


Оглавление

1. Подготовка системы

1.1 Обновление системы

sudo dnf upgrade --refresh -y

Что делает:

  • sudo — права суперпользователя.
  • dnf upgrade — обновляет все пакеты до последних версий.
  • --refresh — принудительно перекачивает метаданные репозиториев (игнорирует кэш).
  • -y — автоматически отвечает «yes».

Зачем: Это стандартная практика безопасности перед установкой нового ПО. Обеспечивает наличие последних обновлений безопасности.


2. Установка OpenSSH сервера

На десктопных установках Rocky Linux OpenSSH обычно включён по умолчанию, но на минимальных серверных образах и в контейнерах его может не быть.

2.1 Проверка, установлен ли SSH-сервер

rpm -qa | grep openssh-server

Что делает: Проверяет, установлен ли пакет openssh-server.

Ожидаемый вывод (если установлен):

openssh-server-9.9p1-12.el10.x86_64

Если вывода нет — пакет не установлен, переходите к шагу 2.2.

2.2 Установка SSH-сервера

sudo dnf install -y openssh-server

Что делает: Устанавливает SSH-демон (sshd) и его зависимости.

Зачем: SSH-сервер позволяет другим компьютерам подключаться к этой машине.

2.3 Установка SSH-клиента (опционально)

sudo dnf install -y openssh-clients

Что делает: Устанавливает клиентские утилиты SSH (ssh, scp, sftp).

Зачем: Если вам нужно подключаться к другим серверам с этой машины — установите клиент. Обычно он уже установлен в системе.


3. Запуск и включение SSH-сервиса

3.1 Включение автозапуска и запуск сервиса

По отдельности:

sudo systemctl enable sshd
sudo systemctl start sshd

Или одной командой (рекомендуется):

sudo systemctl enable --now sshd

Что делает:

  • enable — добавляет сервис в автозагрузку (будет стартовать при загрузке системы).
  • start — запускает сервис прямо сейчас.
  • --now — комбинирует оба действия.

3.2 Проверка статуса сервиса

sudo systemctl status sshd

Ожидаемый вывод (пример):

● sshd.service - OpenSSH server daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
     Active: active (running) since Tue 2026-01-07 10:30:00 UTC; 2min ago
   Main PID: 1234 (sshd)
      Tasks: 1 (limit: 23456)
     Memory: 1.2M
        CPU: 12ms

Признаки успеха:

  • Active: active (running) — сервис работает
  • enabled — автозагрузка настроена

3.3 Проверка, что SSH слушает порт 22

ss -tlnp | grep :22

Что делает: Показывает все открытые TCP-порты и фильтрует строку с портом 22.

Ожидаемый вывод:

LISTEN 0      128          0.0.0.0:22        0.0.0.0:*    users:(("sshd",pid=1234,fd=3))
LISTEN 0      128             [::]:22           [::]:*    users:(("sshd",pid=1234,fd=4))

Зачем: Убедиться, что SSH-демон слушает входящие соединения.

💡 Если команда ss не найдена: установите пакет iproute:

sudo dnf install -y iproute

3.4 Проверка версии OpenSSH

ssh -V

Ожидаемый вывод (пример для Rocky 10):

OpenSSH_9.9p1, OpenSSL 3.5.1 1 Jul 2025

Зачем: Убедиться, что установка прошла успешно. Версии зависят от релиза Rocky Linux: Rocky 8 → 8.0p1, Rocky 9 → 8.7p1, Rocky 10 → 9.9p1.


4. Настройка файрвола (firewalld)

Rocky Linux использует firewalld по умолчанию. Перед изменением правил на удалённом сервере убедитесь, что у вас есть консольный доступ или альтернативный способ подключения.

4.1 Проверка, разрешён ли SSH в файрволе

sudo firewall-cmd --list-services

Ожидаемый вывод (SSH уже разрешён):

cockpit dhcpv6-client ssh

Если ssh есть в списке — дополнительная настройка не требуется.

4.2 Добавление SSH в файрвол (если отсутствует)

sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload

Что делает:

  • --add-service=ssh — разрешает SSH-трафик (порт 22).
  • --permanent — сохраняет правило после перезагрузки.
  • --reload — применяет изменения без перезапуска файрвола.

4.3 Проверка, что SSH разрешён

sudo firewall-cmd --list-services

Ожидаемый вывод:

cockpit dhcpv6-client ssh

5. Подключение к удалённым серверам

5.1 Подключение с паролем

ssh username@remote_server

Пример:

ssh admin@192.168.1.100

Что делает: Подключается к удалённому серверу с указанным именем пользователя.

💡 При первом подключении SSH запросит подтверждение fingerprint сервера. Введите yes — ключ будет сохранён в ~/.ssh/known_hosts.

5.2 Подключение на нестандартный порт

ssh -p 2222 username@remote_server

Что делает: Подключается к SSH-серверу, работающему на порту 2222 (вместо стандартного 22).


6. Настройка ключевой аутентификации (более безопасно)

Ключевая аутентификация использует криптографическую пару ключей вместо пароля. Это безопаснее и удобнее при частых подключениях.

6.1 Генерация SSH-ключа (на клиентской машине)

ssh-keygen -t ed25519 -C "your_email@example.com"

Что делает:

  • -t ed25519 — выбирает алгоритм Ed25519 (современный и безопасный).
  • -C "your_email@example.com" — добавляет комментарий (обычно email) для идентификации ключа.

Ожидаемый вывод:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub

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

💡 Для совместимости со старыми системами (которые не поддерживают Ed25519) используйте RSA 4096:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

6.2 Копирование публичного ключа на удалённый сервер

ssh-copy-id username@remote_server

Что делает: Добавляет ваш публичный ключ в файл ~/.ssh/authorized_keys на удалённом сервере.

Вас попросят ввести пароль последний раз.

6.3 Проверка ключевой аутентификации

ssh username@remote_server

Если всё настроено правильно — вы подключитесь без ввода пароля (или с вводом passphrase, если вы его установили).


7. Настройка SSH-сервера (hardening)

Файл конфигурации SSH-сервера находится по пути /etc/ssh/sshd_config.

7.1 Создание резервной копии

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

Зачем: Чтобы можно было восстановить настройки в случае ошибки.

7.2 Редактирование конфигурации

sudo nano /etc/ssh/sshd_config

Важное примечание для Rocky 9 и 10: SSH использует drop-in директорию /etc/ssh/sshd_config.d/. Чтобы переопределить настройки, добавьте их в файл с меньшим номером (например, 01-custom.conf) или поместите в sshd_config перед строкой Include.

7.3 Рекомендуемые настройки безопасности

Отключение входа для root:

PermitRootLogin no

⚠️ Перед отключением root-логина убедитесь, что у вас есть другой пользователь с sudo правами. Иначе вы заблокируете себе доступ.

Включение ключевой аутентификации (обычно уже включено):

PubkeyAuthentication yes

Отключение аутентификации по паролю (после настройки ключей):

PasswordAuthentication no

Настройка таймаутов сессии (отключает неактивные сессии):

ClientAliveInterval 300
ClientAliveCountMax 2

Что делает: Каждые 5 минут сервер проверяет активность клиента. После 2 неудачных проверок (10 минут бездействия) сессия завершается.

Ограничение доступа по пользователям:

AllowUsers admin deploy

Ограничение доступа по группам:

AllowGroups sshusers

Отключение GSSAPI (ускоряет подключение, если не используется Kerberos):

GSSAPIAuthentication no

7.4 Изменение порта SSH (опционально)

Изменение порта с 22 на нестандартный снижает количество атак перебором.

В файле sshd_config:

Port 2222

Обновление SELinux (обязательно для Rocky Linux):

sudo dnf install -y policycoreutils-python-utils
sudo semanage port -a -t ssh_port_t -p tcp 2222

Обновление файрвола:

sudo firewall-cmd --remove-service=ssh --permanent
sudo firewall-cmd --add-port=2222/tcp --permanent
sudo firewall-cmd --reload

7.5 Применение изменений

Проверка синтаксиса конфигурации:

sudo sshd -t

Если нет вывода — синтаксис правильный. Если есть ошибки — исправьте их.

Перезапуск SSH-сервера:

sudo systemctl restart sshd

⚠️ Важно: Если вы подключены по SSH, держите текущую сессию открытой и проверьте новое подключение из второго терминала перед закрытием старого. Это предотвратит блокировку при ошибках.


8. Диагностика проблем

8.1 Ошибка: «Connection refused»

Причина: SSH-сервер не запущен или слушает другой порт.

Решение:

sudo systemctl status sshd
sudo journalctl -xeu sshd

8.2 Ошибка: «Permission denied (publickey)»

Причина: Проблема с ключевой аутентификацией.

Проверьте:

  • Публичный ключ добавлен в ~/.ssh/authorized_keys
  • Права на файлы: chmod 700 ~/.ssh и chmod 600 ~/.ssh/authorized_keys
  • Домашняя директория не общедоступна: chmod 755 ~
  • В sshd_config включено: PubkeyAuthentication yes

Диагностика с подробным выводом:

ssh -vvv username@remote_server

8.3 SELinux блокирует нестандартный порт

Проверка отказов SELinux:

sudo ausearch -m avc -ts recent | grep sshd

Решение: Добавьте порт в SELinux (см. раздел 7.4).

8.4 Файрвол блокирует подключение

Проверка правил файрвола:

sudo firewall-cmd --list-all

Если services: ssh или ports: 2222/tcp отсутствуют — добавьте их (см. раздел 4).


9. Удаление SSH-сервера

9.1 Остановка и отключение сервиса

sudo systemctl stop sshd
sudo systemctl disable sshd

9.2 Удаление пакета

sudo dnf remove -y openssh-server

9.3 Полное удаление конфигурации (опционально)

⚠️ Внимание: Следующие команды удаляют конфигурацию SSH и ключи хоста. При переустановке будут сгенерированы новые ключи, и клиенты увидят предупреждение о несовпадении fingerprint (отпечатков).

sudo rm -f /etc/ssh/sshd_config /etc/ssh/sshd_config.backup /etc/ssh/ssh_host_*

9.4 Проверка удаления

rpm -qa | grep openssh-server

Ожидаемый вывод: (пусто, пакет не установлен)


Чек-лист: всё готово к работе

# 1. Проверка статуса SSH-сервера
sudo systemctl status sshd

# 2. Проверка, что SSH слушает порт 22
ss -tlnp | grep :22

# 3. Проверка версии
ssh -V

# 4. Проверка правил файрвола
sudo firewall-cmd --list-services | grep ssh

# 5. Проверка подключения к себе (локально)
ssh localhost

Заключение

Вы установили и настроили SSH-сервер на Rocky Linux с безопасными параметрами по умолчанию, включая ключевую аутентификацию и правильные правила файрвола.

Что теперь есть в системе:

  • ✅ Работающий SSH-сервер с автозапуском
  • ✅ Настроенный файрвол для доступа по SSH
  • ✅ Ключевая аутентификация (более безопасная, чем пароли)
  • ✅ Основные hardening-настройки

Что дальше:

  • Для продакшен-сред рассмотрите установку fail2ban для защиты от перебора паролей
  • После развёртывания ключей отключите аутентификацию по паролю (PasswordAuthentication no)
  • Регулярно обновляйте систему: sudo dnf upgrade — это обновит и OpenSSH тоже
  • Для особо чувствительных систем настройте port knocking

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *