Перейти к содержимому

SSH-ключи вместо паролей

SSH-ключ — пара файлов: публичный (его можно показывать, он кладётся на сервер) и приватный (никогда не покидает ваш компьютер). Вход с ключом не передаёт пароль по сети вообще, а перебор паролей становится бессмысленным. Десять минут настройки — и сервер закрыт от 99 % автоматических атак.

  • Терминал: macOS/Linux — встроенный, Windows 10/11 — PowerShell или Windows Terminal (ssh встроен).
  • Если сервер ещё не заказан — проще всего вставить публичный ключ при заказе VPS.
Окно терминала
ssh-keygen -t ed25519 -C "мой ноутбук"

Enter (путь по умолчанию ~/.ssh/id_ed25519), затем — passphrase (пароль на сам ключ; можно пустой, но с passphrase украденный файл ключа бесполезен). Появятся два файла: id_ed25519 (приватный) и id_ed25519.pub (публичный).

Путь А — при заказе VPS: в конструкторе есть поле «SSH-ключ (опционально)» — вставьте содержимое id_ed25519.pub одной строкой. Ключ окажется на сервере сразу после создания.

Путь Б — на живом сервере:

Окно терминала
# с вашего компьютера (спросит пароль — последний раз)
ssh-copy-id root@адрес-сервера

или вручную на сервере: содержимое .pub добавить строкой в /root/.ssh/authorized_keys (права: каталог 700, файл 600).

Окно терминала
ssh root@адрес-сервера

Вошло без пароля (спросило только passphrase ключа, если задали) — ключ работает.

Теперь пароль можно закрыть совсем (внутри сервера):

Окно терминала
# /etc/ssh/sshd_config:
PasswordAuthentication no
PermitRootPasswordAuthentication 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.