Введение / Зачем это нужно
SSH — основной инструмент для безопасного удалённого управления серверами на Linux. Правильная настройка защищает систему от несанкционированного доступа, а использование ключей вместо паролей исключает риск брутфорса. После этого гайда вы сможете заходить на сервер быстро и безопасно, а аудит и мониторинг станут прозрачнее.
Требования / Подготовка
- Клиент и сервер под управлением Ubuntu 22.04/24.04, Debian 11/12 или CentOS Stream 9.
- Пользователь с правами
sudoна сервере. - Открытый порт для управления (по умолчанию 22) или альтернативный, если планируете его сменить.
- Клиентский доступ к терминалу (Linux/macOS) или OpenSSH в Windows.
Пошаговая инструкция
Шаг 1: Установить и проверить OpenSSH-сервер
Установите пакет и убедитесь, что служба запущена:
# Ubuntu / Debian
sudo apt update
sudo apt install -y openssh-server
# CentOS / RHEL
sudo dnf install -y openssh-server
Проверьте статус и включите автозапуск:
sudo systemctl enable --now sshd
sudo systemctl status sshd
💡 Совет: Если сервер за NAT или фаерволом, откройте порт на брандмауэре до первого подключения.
Шаг 2: Сгенерировать ключи на клиенте
Создайте пару ключей Ed25519 (предпочтительно) или RSA:
# Ed25519 — современный и компактный вариант
ssh-keygen -t ed25519 -C "user@laptop-2026"
# RSA — для совместимости со старыми системами
# ssh-keygen -t rsa -b 4096 -C "user@laptop-2026"
- По умолчанию ключи сохранятся в
~/.ssh/id_ed25519и~/.ssh/id_ed25519.pub. - Вы можете задать кодовую фразу для приватного ключа — это повысит безопасность при утечке файла.
Шаг 3: Скопировать публичный ключ на сервер
Простой способ — использовать ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
Если утилиты нет, добавьте ключ вручную:
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
⚠️ Важно: права
700для.sshи600дляauthorized_keysобязательны, иначе сервер может игнорировать ключи.
Шаг 4: Настроить sshd и защитить порт
Откройте конфигурационный файл:
sudo nano /etc/ssh/sshd_config
Рекомендуемые изменения:
Port 22
# При необходимости смените порт, например на 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers your_user
Примените и перезапустите службу:
sudo systemctl restart sshd
Ограничьте доступ через фаервол:
# Ubuntu / Debian (UFW)
sudo ufw allow 22/tcp
sudo ufw enable
# CentOS (firewalld)
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload
💡 Совет: Для публичных серверов используйте
fail2banили ограничение по IP, чтобы снизить шум и риск атак.
Проверка результата
Убедитесь, что вход работает без пароля и root заблокирован:
ssh -i ~/.ssh/id_ed25519 your_user@server
Проверьте, что парольный вход отключён:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no your_user@server
# Ожидается отказ
Убедитесь, что sshd слушает нужный порт:
sudo ss -tlnp | grep ssh
Возможные проблемы
- «Permission denied (publickey)» — проверьте права на
.sshиauthorized_keys, а также наличие ключа вAllowUsers. - Соединение сбрасывается — возможно, порт закрыт на фаерволе или
sshdне перезапущен после правок. - Потерян ключ — временно включите
PasswordAuthentication yes, войдите в консоль и добавьте новый ключ, затем верните настройки.
Готово. Теперь ваш сервер доступен по SSH с минимальной поверхностью атаки, а вход происходит быстро и надёжно.