Усиление SSH
В этой статье вы настроите вход на VPS mHost по SSH-ключу вместо пароля, отключите парольный и root-доступ по SSH в sshd_config, при желании смените порт SSH и безопасно перезапустите sshd, не потеряв доступ к серверу.
Что понадобится
- VPS mHost на Ubuntu 22.04/24.04, Debian 11/12 или AlmaLinux/Rocky Linux 8/9.
- Уже работающий доступ по SSH — под
rootили пользователем сsudo(пока по паролю; ключ настроим по ходу статьи). Если ещё ни разу не подключались к серверу, начните со статьи «Консоль VNC и первое подключение (SSH/RDP)» — там тоже есть базовые шаги сssh-keygen/ssh-copy-id, здесь мы разберём их подробнее и пойдём дальше. - SSH-клиент на своём компьютере (не на сервере): на macOS и Linux он уже встроен, на Windows 10/11 тоже обычно есть из коробки — либо графический клиент PuTTY.
- Доступ к панели VMmanager 6 — как запасной вариант: если что-то пойдёт не так с самим SSH, на сервер всё равно можно попасть через графическую консоль VNC прямо в браузере (см. «Как войти в VMmanager 6»).
Шаг 1. Сгенерируйте пару SSH-ключей
Ключи генерируются на своём компьютере (клиенте), а не на сервере:
ssh-keygen -t ed25519 -C "you@example.com"На запрос пути можно просто нажать Enter — ключ сохранится в ~/.ssh/id_ed25519 (закрытый ключ) и ~/.ssh/id_ed25519.pub (открытый). На запрос passphrase рекомендуется задать пароль на сам ключ: он не передаётся на сервер и не связан с паролем учётной записи, а лишь защищает файл ключа на вашем диске.
Шаг 2. Скопируйте публичный ключ на сервер
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@185.246.66.12Замените root@185.246.66.12 на своего пользователя и IP-адрес сервера. Команда допишет ваш открытый ключ в ~/.ssh/authorized_keys на сервере, попросив пароль в последний раз.
Если ssh-copy-id недоступен (например, в Windows PowerShell без утилит OpenSSH), сделайте то же самое вручную:
cat ~/.ssh/id_ed25519.pub | ssh root@185.246.66.12 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"Проверьте вход по ключу — в новом окне терминала, не закрывая текущую сессию:
ssh root@185.246.66.12Подключение должно пройти без запроса пароля от учётной записи (запрос passphrase от самого ключа, если вы его задали в шаге 1, — это другое, и это нормально).
Шаг 3. Отключите вход по паролю и ограничьте root в sshd_config
Откройте конфигурацию SSH-сервера:
sudo nano /etc/ssh/sshd_configНайдите (или добавьте, если их нет) следующие параметры и приведите к такому виду:
PasswordAuthentication no
PermitRootLogin prohibit-passwordPasswordAuthentication no— полностью отключает вход по паролю для всех пользователей; дальше — только по ключу.PermitRootLogin prohibit-password— root по-прежнему может зайти по SSH, но только с ключом, не с паролем. Это безопасный вариант по умолчанию — особенно если root является единственной учётной записью на сервере.
Сохраните файл, затем проверьте синтаксис и отдельно — какие значения реально применятся:
sudo sshd -t
sudo sshd -T | grep -i passwordauthentication
sudo sshd -T | grep -i permitrootloginsshd -t проверяет файл на синтаксические ошибки. sshd -T выводит итоговую (эффективную) конфигурацию — то, что реально применится после перезапуска, с учётом всех подключаемых файлов.
Проверьте, не переопределяет ли что-то ваши настройки:
sudo grep -rn "PasswordAuthentication" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*.confЕсли лишняя строка нашлась в одном из файлов sshd_config.d/ — исправьте или удалите её прямо там и повторите проверку через sshd -T из шага выше.
Пока не перезапускайте sshd — сделаете это в шаге 5, вместе со сменой порта, если решите её делать.
Шаг 4. Смените порт SSH (опционально)
Смена порта не заменяет вход по ключу и ограничение root из шага 3 — она лишь снижает фоновый шум от автоматических сканеров, которые круглосуточно перебирают порт 22 по всему интернету. Если это не критично, шаг можно пропустить и перейти сразу к шагу 5.
Сначала — откройте новый порт в файрволе. Порт 22 на mHost открыт по умолчанию, но это не распространяется на новый порт: его нужно открыть явно.
Ubuntu / Debian (ufw)
sudo ufw status
sudo ufw allow 2222/tcpAlmaLinux / Rocky (firewalld + SELinux)
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
sudo semanage port -a -t ssh_port_t -p tcp 2222Затем пропишите новый порт в sshd_config:
sudo nano /etc/ssh/sshd_configPort 22
Port 2222Директиву Port можно указывать несколько раз — sshd будет слушать сразу оба порта. Оставьте 22 до тех пор, пока не убедитесь, что порт 2222 работает (уберёте лишнюю строку в шаге 5), — так у вас остаётся путь назад, если что-то пойдёт не так.
Шаг 5. Проверьте конфигурацию и перезапустите sshd, не закрывая текущую сессию
sudo sshd -tПерезапустите службу — команда зависит от дистрибутива.
Ubuntu / Debian
sudo systemctl restart sshAlmaLinux / Rocky
sudo systemctl restart sshdОткройте новое окно терминала и подключитесь заново, пока старая сессия ещё держится открытой:
ssh -p 2222 root@185.246.66.12Флаг -p 2222 нужен, только если вы меняли порт в шаге 4; если нет — просто ssh root@185.246.66.12. Закрывайте старую сессию только после того, как новое подключение прошло успешно. Если новое подключение не проходит — старая сессия всё ещё открыта: вернитесь к sshd_config, исправьте настройку и повторите перезапуск. Дополнительная подстраховка на случай, если оборвутся обе сессии, — графическая консоль VNC в VMmanager 6 (см. «Как войти в VMmanager 6»): она не зависит от SSH и открывается прямо в браузере.
Если вы меняли порт в шаге 4 и новое подключение подтвердилось — уберите временную лазейку: удалите строку Port 22 из sshd_config, закройте старое правило файрвола и перезапустите sshd ещё раз, с той же дисциплиной (новое окно терминала перед закрытием старого).
sudo ufw delete allow 22/tcpsudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reloadЧто дальше
Ключ вместо пароля и нестандартный порт снижают фоновый шум, но не защищают от целенаправленного перебора — для этого добавьте автоматическую блокировку по IP после нескольких неудачных попыток, см. «Fail2ban: блокировка после неудачных попыток входа». Полный разбор правил файрвола — в статье «Настройка файрвола UFW», а общий чек-лист по безопасности сервера — в статье «Чек-лист безопасности сервера».