SSH-ключи вместо паролей
SSH-ключ — пара файлов: публичный (его можно показывать, он кладётся на сервер) и приватный (никогда не покидает ваш компьютер). Вход с ключом не передаёт пароль по сети вообще, а перебор паролей становится бессмысленным. Десять минут настройки — и сервер закрыт от 99 % автоматических атак.
Перед началом
Заголовок раздела «Перед началом»- Терминал: macOS/Linux — встроенный, Windows 10/11 — PowerShell или Windows Terminal (ssh встроен).
- Если сервер ещё не заказан — проще всего вставить публичный ключ при заказе VPS.
1. Сгенерируйте пару
Заголовок раздела «1. Сгенерируйте пару»ssh-keygen -t ed25519 -C "мой ноутбук"Enter (путь по умолчанию ~/.ssh/id_ed25519), затем — passphrase (пароль на сам ключ; можно пустой, но с passphrase украденный файл ключа бесполезен). Появятся два файла: id_ed25519 (приватный) и id_ed25519.pub (публичный).
2. Положите публичный ключ на сервер
Заголовок раздела «2. Положите публичный ключ на сервер»Путь А — при заказе VPS: в конструкторе есть поле «SSH-ключ (опционально)» — вставьте содержимое id_ed25519.pub одной строкой. Ключ окажется на сервере сразу после создания.
Путь Б — на живом сервере:
# с вашего компьютера (спросит пароль — последний раз)ssh-copy-id root@адрес-сервераили вручную на сервере: содержимое .pub добавить строкой в /root/.ssh/authorized_keys (права: каталог 700, файл 600).
3. Проверьте вход по ключу
Заголовок раздела «3. Проверьте вход по ключу»ssh root@адрес-сервераВошло без пароля (спросило только passphrase ключа, если задали) — ключ работает.
4. Отключите парольный вход
Заголовок раздела «4. Отключите парольный вход»Теперь пароль можно закрыть совсем (внутри сервера):
# /etc/ssh/sshd_config:PasswordAuthentication noPermitRootPasswordAuthentication no # если версия sshd поддерживает
systemctl restart sshdПрежде чем закрыть сессию — откройте вторую и убедитесь, что вход по ключу работает. Запасной вход всегда есть через VNC-консоль.
Проверка результата
Заголовок раздела «Проверка результата»ssh root@адрес входит без пароля, а ssh -o PubkeyAuthentication=no root@адрес получает отказ — парольный вход закрыт, ключ работает.
Если что-то пошло не так
Заголовок раздела «Если что-то пошло не так»| Симптом | Причина | Что делать |
|---|---|---|
Permission denied (publickey) |
На сервере нет вашего публичного ключа | Добавьте в authorized_keys через консоль VNC |
| Ключ «отвергается» | Права на ~/.ssh или authorized_keys слишком широкие | chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys |
| Не могу найти приватный ключ | Другой путь/имя | ssh -i ~/.ssh/мой-ключ root@адрес |
| Запароленный ключ каждый раз спрашивает passphrase | Нет агента | ssh-add (агент запомнит на сессию) |
Частые вопросы
Заголовок раздела «Частые вопросы»Что надёжнее — passphrase на ключе или без?
С passphrase: даже украденный файл ключа не даст вход. На своей машине с шифрованным диском многие живут без passphrase — компромисс между удобством и параноей.
Нужно ли отключать парольный вход?
Настоятельно рекомендуем после проверки ключа: это выключает целый класс атак перебором. VNC-консоль остаётся запасным входом.
Как дать доступ коллеге?
Добавьте его публичный ключ отдельной строкой в authorized_keys. Отзыв — удалите строку. Передача всего сервера другому аккаунту — «Передача владения» в карточке VPS.