ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Linux-сервер

Настройка входа по SSH-ключу в Linux и отключение входа по паролю (ed25519)

6 шагов 11 мин чтения 1055 просмотров 49
Содержание

В отличие от паролей, SSH-ключи практически невозможно подобрать перебором. Вместе с отключением входа по паролю они резко повышают безопасность сервера и позволяют входить без ввода пароля. В статье описана настройка входа по SSH-ключу в Linux: создание ключа ed25519 командой ssh-keygen на своём компьютере, загрузка открытого ключа на сервер, права на authorized_keys и отключение парольной аутентификации после проверки. Серверная часть — Debian/Ubuntu и CentOS/Rocky/AlmaLinux, клиент — Windows, macOS или Linux.

Шаг 1: Создайте ключ ed25519 командой ssh-keygen

Выполните команду на своём компьютере, а не на сервере. Ключи 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
Закрытый ключ id_ed25519 — это ключ от вашего сервера. Никому его не передавайте и не загружайте на сервер, в облако или репозиторий. Сохраните резервную копию в надёжном месте: без него войти по ключу будет невозможно.

Шаг 2: Загрузите открытый ключ через ssh-copy-id

В 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"

Шаг 3: Проверьте права на 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

Шаг 4: Проверьте вход по SSH-ключу

Не закрывайте текущую сессию и откройте новый терминал на своём компьютере. Если пароль сервера больше не запрашивается (только парольная фраза ключа, если вы её задали), вход по ключу работает.

# From your computer: should log in without asking for the server password
ssh -i ~/.ssh/id_ed25519 [email protected]

Шаг 5: Отключите вход по паролю в SSH

Убедившись, что ключ работает, отключите парольную аутентификацию в /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

Шаг 6: Проверьте конфигурацию и перезапустите sshd

Проверьте синтаксис через 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-адрес сервера, операционную систему, выполненные команды и приложите скриншот ошибки: так инженер разберётся быстрее.

Помог ли вам данный ответ?

Похожие руководства