Пароль можно угадать, перехватить и использовать повторно, и он может оказаться в утечке данных. SSH-ключ угадать невозможно: секретная часть никогда не покидает ваш компьютер, а сервер знает только публичную часть. Это изменение конфигурации даёт наибольший выигрыш в безопасности при наименьших усилиях.
Как сгенерировать пару SSH-ключей?
Одной командой, ssh-keygen -t ed25519, которая создаёт закрытый и публичный ключи.
На своём компьютере — не на сервере — откройте терминал (в Windows подойдёт PowerShell):
ssh-keygen -t ed25519 -C "martin@personal-laptop"
- Примите предложенный путь,
~/.ssh/id_ed25519. - Введите парольную фразу. Она шифрует закрытый ключ: если ваш компьютер украдут, ключом нельзя будет воспользоваться.
Будут созданы два файла:
id_ed25519— закрытый ключ. Его никуда не копируют, никаким способом не пересылают и никогда не вставляют в обращение.id_ed25519.pub— публичный ключ. Именно его вы размещаете на серверах.
Выведите публичный ключ, чтобы скопировать его:
cat ~/.ssh/id_ed25519.pub
Он занимает одну строку и начинается с ssh-ed25519 AAAA….
Как добавить публичный ключ на VPS?
Двумя способами: вставить его в карточку SSH-ключи на вкладке Доступ и безопасность или отправить из терминала командой ssh-copy-id.
Через личный кабинет — это самый простой способ:
- Откройте Мои услуги, затем ваш VPS.
- Перейдите на вкладку Доступ и безопасность.
- В карточке SSH-ключи вставьте публичный ключ. Поле принимает по одному ключу на строку в форматах
ssh-rsa,ssh-ed25519иecdsa. - Нажмите Сохранить ключи.
Сообщение «SSH-ключи успешно обновлены.» подтверждает сохранение, а на вкладке История остаётся запись об этом. Эти ключи сохраняются и автоматически внедряются повторно при каждой переустановке VPS: повторять процедуру не нужно.
Из терминала также работает классический способ:
ssh-copy-id root@IP_ADDRESS
Затем проверьте, что вход по ключу работает, не закрывая текущий сеанс:
ssh root@IP_ADDRESS
Если сервер больше не запрашивает пароль учётной записи — в крайнем случае только парольную фразу ключа, — всё настроено.
Как отключить вход по SSH с паролем?
Установите PasswordAuthentication no в /etc/ssh/sshd_config и перезагрузите конфигурацию службы SSH — но только после того, как убедитесь, что вход по ключу работает.
Переходите к этому шагу только после проверки предыдущего пункта и не закрывайте текущий сеанс SSH на протяжении всей процедуры.
Отредактируйте /etc/ssh/sshd_config:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password
Перед перезагрузкой конфигурации службы проверьте синтаксис — эта команда убережёт вас от SSH-сервера, который отказывается перезапускаться:
sshd -t
systemctl reload ssh # Debian, Ubuntu
systemctl reload sshd # AlmaLinux, Rocky, CentOS Stream
Теперь откройте второй сеанс в другом окне. Если подключение удалось, первый сеанс можно спокойно закрыть. Если нет, исправьте файл из оставшегося открытым сеанса.
Как сохранить закрытый ключ и предоставить доступ другому человеку?
Храните резервную копию закрытого ключа там же, где храните пароли, и добавляйте только публичный ключ другого человека, на новой строке.
- Храните резервную копию закрытого ключа там же, где и резервные копии паролей: потерять его — значит потерять доступ, если только не воспользоваться консолью.
- Чтобы предоставить доступ второму человеку, добавьте его публичный ключ на новой строке. Никогда не используйте один закрытый ключ на несколько человек: вы потеряете возможность отслеживать действия и не сможете отозвать доступ у кого-то одного.
- Чтобы отозвать доступ, удалите соответствующую строку и снова сохраните.
Что делать, если SSH-ключ утерян?
Вы не останетесь без доступа. Откройте аварийную консоль в личном кабинете: она показывает экран машины без использования SSH. Войдите с паролем администратора, временно верните PasswordAuthentication yes, добавьте новый ключ, а затем снова отключите вход по паролю.