Статьи Nazara
Как безопасно настроить SSH на VPS и не потерять доступ
Пошаговая настройка SSH на VPS: отдельный пользователь, ключ, firewall, запрет пароля и root-входа, проверка конфигурации и восстановление доступа.
Безопасная настройка SSH на VPS начинается с сохранения рабочего доступа: создайте отдельного пользователя, добавьте его публичный ключ, проверьте вход в новой сессии и только после этого отключайте пароль и прямой вход root. Такой порядок защищает сервер от простых атак и, главное, не оставляет владельца за закрытой дверью из-за одной ошибочной строки в конфигурации.
Инструкция рассчитана на небольшой VPS с Ubuntu и OpenSSH. Она объясняет логику и точки проверки, а не предлагает копировать один универсальный файл: названия служб, включённые фрагменты конфигурации и правила firewall могут отличаться. Перед изменениями убедитесь, что в панели провайдера доступна веб-консоль или другой независимый способ восстановления.
Как устроить безопасный доступ к VPS
SSH — это зашифрованный протокол для удалённого управления сервером и передачи файлов. На VPS обычно работает серверный процесс sshd, а на компьютере администратора — клиент ssh. Защита строится из нескольких решений: отдельная учётная запись, вход по ключу, ограниченные права, firewall, журналирование и резервный способ доступа.
Сначала запишите фактическую схему: адрес сервера, порт SSH, имя пользователя, откуда разрешён вход, где хранится приватный ключ и кто имеет административные права. Если сервером управляют несколько человек, каждому нужен собственный ключ. Один общий приватный ключ нельзя отозвать для одного сотрудника и невозможно уверенно связать с конкретным действием.
| Элемент | Зачем нужен | Как проверить |
|---|---|---|
| Отдельный пользователь | Повседневная работа без постоянного входа root | Входит по ключу и выполняет только разрешённые команды через sudo |
| SSH-ключ | Аутентификация без передачи пароля серверу | Новая сессия открывается с нужным ключом |
| Firewall | Доступ только к необходимым сетевым службам | Разрешён текущий SSH-порт, лишние порты закрыты |
| Резервный вход | Восстановление после ошибки в сети или конфигурации | Консоль провайдера открывается независимо от SSH |
Смена стандартного порта может уменьшить поток автоматических записей в журнале, но не заменяет ключи, ограничение пользователей и обновления. Сканирование найдёт открытый сервис и на другом порту. Не оценивайте защиту по количеству видимых попыток входа; проверяйте, какие способы аутентификации реально разрешены.
Как создать пользователя и выдать административные права
Не начинайте с запрета root. Сначала создайте обычного пользователя из текущей рабочей сессии и выдайте ему административные права способом, принятым в вашей системе. В Ubuntu пользователя обычно добавляют в группу sudo, но перед этим проверьте локальную политику и существующие группы.
sudo adduser adminuser
sudo usermod -aG sudo adminuser
id adminuser
Замените adminuser на осмысленное имя, не совпадающее с примером. Команда id показывает группы пользователя; этого ещё недостаточно. Откройте отдельную сессию после добавления ключа и выполните безвредную проверку sudo -v или просмотр состояния службы. Не выдавайте права sudo приложению, веб-серверу или пользователю базы данных ради удобства деплоя.
Если на VPS работают автоматические процессы, создайте для них отдельные системные учётные записи без интерактивного входа. Администратор, приложение и резервное копирование решают разные задачи и не должны делить один домашний каталог и один набор ключей.
Ограничение допустимых пользователей можно оформить директивой AllowUsers или AllowGroups. В официальном руководстве OpenSSH по sshd_config указано, что AllowUsers разрешает вход только совпадающим именам или шаблонам. Включайте это ограничение после проверки всех рабочих и аварийных учётных записей.
Как создать SSH-ключ и установить публичную часть
Пара SSH-ключей состоит из приватной и публичной частей. Приватная остаётся на доверенном устройстве администратора и не отправляется на сервер, в чат или репозиторий. Публичную часть добавляют в файл ~/.ssh/authorized_keys нужного пользователя. Утечка публичного ключа не раскрывает приватную часть, но состав разрешённых ключей всё равно нужно контролировать.
Для нового ключа OpenSSH поддерживает Ed25519. Официальная страница ssh-keygen перечисляет этот тип и поясняет, что приватный файл не должен читаться другими пользователями. Создайте отдельный ключ для администрирования конкретной среды и задайте парольную фразу, если рабочий процесс позволяет её безопасно использовать.
ssh-keygen -t ed25519 -C "vps-admin"
ssh-copy-id adminuser@server.example
Комментарий помогает понять назначение ключа, но не является средством защиты. Если ssh-copy-id недоступен, скопируйте только строку из файла с расширением .pub в authorized_keys. Не вставляйте туда содержимое приватного файла без .pub.
Проверьте владельца и права домашнего каталога, .ssh и authorized_keys. Слишком широкая запись для посторонних пользователей может привести к отказу OpenSSH принимать ключ. Ubuntu рекомендует убедиться, что записывать в authorized_keys может только нужный пользователь; порядок создания ключа и диагностики приведён в официальной инструкции Ubuntu по OpenSSH.
Не удаляйте старый проверенный ключ в ту же минуту, когда добавили новый. Сначала войдите новым ключом, проверьте sudo и только затем отзывайте прежний доступ. Для команды ключи удобно хранить как управляемый список: владелец, устройство, дата добавления и основание для удаления.
Как открыть SSH в firewall и не заблокировать себя
Firewall на сервере должен разрешать текущий порт SSH до включения политики запрета входящих соединений. Проверьте, какой порт фактически слушает sshd, какие правила действуют у облачного провайдера и есть ли отдельный host firewall. Два независимых фильтра могут разрешать разные наборы адресов.
В Ubuntu простые правила часто задают через UFW. Официальная документация называет UFW стандартным интерфейсом для host-based firewall, показывает разрешение порта и проверку состояния. Перед включением выполните просмотр правил и разрешите именно тот порт, по которому подключены сейчас:
sudo ufw status verbose
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status numbered
Пример использует порт 22. Если сервер уже настроен иначе, подставьте фактическое значение. Полный синтаксис, ограничение по исходному адресу и режим --dry-run приведены в официальном руководстве Ubuntu по firewall.
Ограничение SSH одним постоянным IP подходит не всем. Домашний или мобильный адрес может измениться, а администратор окажется без доступа. Если используете allowlist, заранее предусмотрите второй доверенный адрес или консоль провайдера. Не копируйте чужую подсеть из примера: правило должно соответствовать вашей сети.
При смене порта сначала добавьте новое правило firewall, затем настройте OpenSSH, проверьте синтаксис и новый вход. Старое правило удаляют последним. Не меняйте порт, firewall и способ аутентификации одним непроверяемым действием — иначе причина отказа будет неясна.
Как отключить пароль и прямой вход root
Отключение пароля уменьшает риск перебора, но выполнять его можно только после успешного входа по ключу для обычного пользователя. Оставьте текущую сессию открытой. Запустите второе окно терминала, войдите по ключу, выполните sudo и убедитесь, что можете прочитать журналы SSH.
В Ubuntu пользовательские настройки удобно размещать отдельным файлом в /etc/ssh/sshd_config.d/. Документация предупреждает: для большинства директив используется первое найденное значение, а подключаемые фрагменты могут переопределять основной файл. Поэтому недостаточно увидеть строку в одном месте — нужно проверить итоговую конфигурацию.
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
Этот блок — ориентир, а не файл для слепого копирования. PasswordAuthentication управляет парольной аутентификацией, PubkeyAuthentication — входом по публичному ключу, а PermitRootLogin no полностью запрещает удалённый вход root. Точные значения и допустимые варианты определены в руководстве OpenSSH.
Перед применением проверьте синтаксис:
sudo sshd -t
sudo sshd -T | grep -E 'passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication|permitrootlogin'
sshd -t выявляет синтаксические ошибки, а sshd -T выводит эффективную конфигурацию. Если используются условия Match, результат может зависеть от пользователя и адреса; проверяйте сценарий, который действительно нужен. Ubuntu отдельно советует запускать sshd -t до перезапуска, потому что ошибка способна лишить удалённого доступа.
После успешной проверки перечитайте конфигурацию командой, принятой в вашей системе. На Ubuntu это может быть sudo systemctl reload ssh.service; если reload не поддерживается конкретной версией, используйте документированный способ управления службой. Затем откройте третью, новую сессию. Только успешный новый вход подтверждает, что изменение применилось без блокировки.
Как контролировать попытки входа и управлять ключами
Журнал SSH нужен для диагностики и расследования, но не для ежедневного чтения каждой автоматической попытки. На Ubuntu текущие сообщения службы можно посмотреть через journalctl; официальная инструкция OpenSSH предлагает sudo journalctl -fu ssh.service для живой диагностики проблем с ключами.
Проверяйте успешные входы, неожиданные имена пользователей, частые отказы и изменения файлов конфигурации. Не делайте вывод о взломе по одной строке с неудачной попыткой: публичные SSH-сервисы постоянно сканируют. Значимы успешная аутентификация неизвестным ключом, новое административное действие, добавление ключа без заявки или вход из нетипичного места.
Каждый разрешённый ключ должен иметь владельца и срок пересмотра. Увольнение сотрудника, потеря ноутбука или завершение работы подрядчика — основание удалить конкретный публичный ключ и проверить журналы. Замена одного общего ключа на всех устройствах не позволяет аккуратно отозвать доступ.
Инструменты вроде Fail2ban могут временно блокировать источники повторных ошибок, но это дополнительный слой. Они не исправляют разрешённый парольный вход, украденный ключ или чрезмерные права пользователя. Сначала настройте аутентификацию и firewall, затем решайте, нужен ли автоматический ban с учётом риска заблокировать собственный адрес.
Включите внешний контроль доступности нужных сервисов, но не публикуйте панели и метрики без защиты. Общий порядок наблюдения разобран в статье как настроить мониторинг VPS.
Что делать при потере SSH-доступа
План восстановления готовят до ошибки. Найдите в панели хостинга веб-консоль, rescue-режим или другой канал, который не зависит от сетевого доступа к SSH. Проверьте, какие учётные данные и подтверждение владельца потребуются. Ссылка, открывающаяся только после входа потерянным ключом, резервом не считается.
Если новый вход не работает, не закрывайте действующую сессию. Сначала выполните sshd -t, проверьте журнал службы, права authorized_keys, владельца домашнего каталога, действующий порт и firewall. Не перезапускайте сервер наугад: после перезагрузки можно потерять последнюю живую сессию, не исправив причину.
Храните второй проверенный ключ на отдельном защищённом устройстве или используйте аппаратный ключ, если это соответствует риску проекта. Резервный ключ тоже учитывают, периодически проверяют и отзывают при утрате. Незащищённая копия приватного ключа в облачной папке превращает резерв в дополнительную точку компрометации.
Перед крупными изменениями сохраните копию текущей конфигурации и отметьте, что именно меняется. Резервное копирование всего VPS описано отдельно в материале о копиях и проверке восстановления. Для SSH важна ещё и возможность быстро вернуть последний рабочий фрагмент конфигурации через консоль.
Пошаговый чек-лист настройки SSH
- Убедиться, что доступна независимая консоль или rescue-режим провайдера.
- Записать текущий адрес, порт, пользователя и действующие правила firewall.
- Создать отдельного администратора и проверить его права sudo.
- Создать отдельную пару ключей, защитить приватную часть парольной фразой.
- Добавить публичный ключ в
authorized_keysнужного пользователя. - Открыть новую сессию по ключу и выполнить безвредную команду через sudo.
- Разрешить фактический SSH-порт в firewall и проверить состояние правил.
- Оставить рабочую сессию открытой, изменить конфигурацию отдельным фрагментом.
- Запустить
sshd -tи проверить эффективные значения черезsshd -T. - Перечитать конфигурацию и снова войти в новой сессии по ключу.
- Только после этого отключить пароль и прямой вход root.
- Проверить журналы, второй ключ и порядок отзыва доступа.
Настройка SSH — один раздел базовой подготовки сервера. Обновления, firewall, резервные копии, часовой пояс и служебные пути собраны в чек-листе после покупки VPS. Все материалы направления доступны на странице «Серверы и инфраструктура».
Частые вопросы
Нужно ли менять стандартный порт SSH
Не обязательно. Другой порт может уменьшить шум автоматических сканеров, но не заменяет вход по ключу, запрет пароля, ограничение пользователей, firewall и обновления. Если меняете порт, сначала разрешите его в firewall и проверьте новую сессию.
Можно ли сразу отключить вход root
Только после создания обычного администратора, установки его ключа и проверки sudo в отдельной сессии. Иначе ошибка в пользователе, ключе или правах оставит доступной лишь консоль провайдера.
Нужно ли ставить парольную фразу на приватный ключ
Для ключа на рабочем устройстве парольная фраза добавляет защиту при копировании или краже файла. Удобство можно сохранить через ssh-agent. Для автоматических задач применяют отдельные ограниченные ключи и другой порядок хранения секретов.
Почему ключ добавлен, но сервер его не принимает
Проверьте имя пользователя, выбранный клиентом ключ, владельца домашнего каталога, права .ssh и authorized_keys, а также эффективные настройки sshd. Причину ищите в журнале службы, сохраняя текущую рабочую сессию.
Можно ли разрешить SSH только со своего IP
Да, если адрес постоянный и предусмотрен резервный маршрут. При динамическом домашнем или мобильном IP такое правило может заблокировать владельца. Сначала подтвердите диапазон и доступность консоли провайдера.
Как понять, что отключение пароля действительно применилось
Проверьте эффективную конфигурацию через sshd -T, затем откройте новую сессию с явно выбранным ключом. Отдельно протестируйте, что клиент без подходящего ключа не получает парольный вход. Старую сессию закрывайте последней.