Start typing to search across invoices, services, domains, tickets, and more...
В отличие от паролей, SSH-ключи практически невозможно подобрать перебором. Вместе с отключением входа по паролю они резко повышают безопасность сервера и позволяют входить без ввода пароля. В статье описана настройка входа по SSH-ключу в Linux: создание ключа ed25519 командой ssh-keygen на своём компьютере, загрузка открытого ключа на сервер, права на authorized_keys и отключение парольной аутентификации после проверки. Серверная часть — Debian/Ubuntu и CentOS/Rocky/AlmaLinux, клиент — Windows, macOS или Linux.
Выполните команду на своём компьютере, а не на сервере. Ключи ed25519 короткие, надёжные и быстрые — сейчас это рекомендуемый алгоритм. Можно задать парольную фразу: тогда даже украденный файл ключа нельзя будет использовать. Чтобы пропустить, нажмите Enter.
# Works in macOS/Linux terminals and Windows PowerShell
ssh-keygen -t ed25519 -C "me@my-laptop"
# Result:
# ~/.ssh/id_ed25519 private key - never share it
# ~/.ssh/id_ed25519.pub public key - goes to the server
В macOS и Linux команда ssh-copy-id сама добавит ключ в ~/.ssh/authorized_keys на сервере и выставит права. Пароль сервера понадобится ввести один раз.
# macOS / Linux
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 [email protected] # custom port
Во встроенном OpenSSH для Windows нет ssh-copy-id. В PowerShell то же самое делает такая команда:
# Windows PowerShell (no ssh-copy-id)
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
sshd строго относится к правам: если у ~/.ssh или authorized_keys слишком широкие права, ключ просто игнорируется. Если вы добавляли ключ вручную, выполните на сервере команды ниже. В системах с SELinux также восстановите контекст безопасности.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R root:root ~/.ssh
# CentOS / Rocky / AlmaLinux with SELinux: restore the correct context
restorecon -Rv ~/.ssh
Не закрывайте текущую сессию и откройте новый терминал на своём компьютере. Если пароль сервера больше не запрашивается (только парольная фраза ключа, если вы её задали), вход по ключу работает.
# From your computer: should log in without asking for the server password
ssh -i ~/.ssh/id_ed25519 [email protected]
Убедившись, что ключ работает, отключите парольную аутентификацию в /etc/ssh/sshd_config. PermitRootLogin prohibit-password разрешает root входить только по ключу. Во многих облачных образах в /etc/ssh/sshd_config.d/ есть файл (например, 50-cloud-init.conf), снова включающий пароли, — исправьте и его, иначе настройка не применится.
# /etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
# Drop-in files can override the main file - check them
grep -rn 'PasswordAuthentication' /etc/ssh/sshd_config.d/ 2>/dev/null
Проверьте синтаксис через sshd -t и итоговые значения через sshd -T. Когда passwordauthentication равно no, перезапустите службу. Затем снова проверьте вход по ключу в новом окне — попытка входа по паролю должна отклоняться.
sshd -t
sshd -T | grep -Ei 'passwordauthentication|pubkeyauthentication|permitrootlogin'
systemctl restart sshd # CentOS / Rocky / AlmaLinux / Debian
systemctl restart ssh # Ubuntu
Обычно неверны права или ключ вставлен с ошибкой. Убедитесь, что каждый ключ записан в authorized_keys одной строкой, права — 700/600, и запустите ssh -v, чтобы проверить, какой ключ предлагает клиент.
Создайте ключ на каждом компьютере и добавьте каждый открытый ключ отдельной строкой в authorized_keys. Если компьютер утерян, просто удалите его строку.
Войдите через VNC-консоль в клиентском кабинете с паролем root (на консоль настройки SSH не влияют) и добавьте новый открытый ключ. Если пароль root тоже забыт, создайте тикет.
Если проблема не решилась, создайте тикет — техническая поддержка IMIDC работает круглосуточно 24/7. Укажите IP-адрес сервера, операционную систему, выполненные команды и приложите скриншот ошибки: так инженер разберётся быстрее.