Настройка SSH-ключей в Ubuntu

Пошаговая настройка входа по SSH-ключу в Ubuntu: создание ключевой пары, установка публичного ключа на сервер и проверка подключения.

Вход по SSH-ключу безопаснее обычной парольной авторизации и удобнее при регулярном администрировании серверов. В этой инструкции рассматривается только создание ключевой пары, установка публичного ключа на сервер и проверка подключения.

Проверено на: Ubuntu Server 24.04 LTS
Уровень сложности: начальный
Время выполнения: около 10 минут
Требуемый доступ: пользователь с возможностью входа по SSH

Как работает SSH-ключ

SSH использует пару ключей:

  • приватный ключ хранится только на компьютере администратора;
  • публичный ключ добавляется на сервер;
  • сервер разрешает вход, если клиент подтверждает владение соответствующим приватным ключом.

Приватный ключ нельзя передавать другим людям, публиковать или копировать на сервер.

Используемые значения

В примерах применяются универсальные обозначения:

ADMIN_USER
SERVER_IP

Замените их на имя пользователя и IP-адрес своего сервера.

Проверка существующих ключей

Linux и macOS

ls -la ~/.ssh

Windows PowerShell

Get-ChildItem $HOME\.ssh

Если уже существуют файлы:

id_ed25519
id_ed25519.pub

можно использовать существующую пару ключей.

Создание нового SSH-ключа

Рекомендуемый алгоритм — Ed25519.

Linux и macOS

ssh-keygen -t ed25519 -a 100 -C "admin@example.com"

Windows PowerShell

ssh-keygen -t ed25519 -a 100 -C "admin@example.com"

По умолчанию ключи будут сохранены:

~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub

При создании ключа рекомендуется задать парольную фразу. Она защищает приватный ключ, если файл будет скопирован посторонним.

Просмотр публичного ключа

Linux и macOS

cat ~/.ssh/id_ed25519.pub

Windows PowerShell

Get-Content $HOME\.ssh\id_ed25519.pub

Публичный ключ начинается примерно так:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5...

Установка ключа через ssh-copy-id

На Linux и macOS удобнее использовать ssh-copy-id:

ssh-copy-id ADMIN_USER@SERVER_IP

Команда запросит текущий пароль пользователя и добавит публичный ключ в:

~/.ssh/authorized_keys

После этого проверьте вход:

ssh ADMIN_USER@SERVER_IP

Установка ключа вручную

Если ssh-copy-id недоступен, ключ можно передать вручную.

Linux и macOS

cat ~/.ssh/id_ed25519.pub | ssh ADMIN_USER@SERVER_IP 'umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys'

Windows PowerShell

Get-Content $HOME\.ssh\id_ed25519.pub |
ssh ADMIN_USER@SERVER_IP "umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys"

Проверка прав на сервере

Подключитесь к серверу и выполните:

ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys

Рекомендуемые права:

~/.ssh                  700
~/.ssh/authorized_keys  600

Исправить их можно так:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Проверьте владельца:

stat -c '%U:%G %a %n' ~/.ssh ~/.ssh/authorized_keys

Если файлы принадлежат другому пользователю:

sudo chown -R ADMIN_USER:ADMIN_USER /home/ADMIN_USER/.ssh

Проверка входа по ключу

Откройте новое окно терминала и выполните:

ssh -v ADMIN_USER@SERVER_IP

В диагностическом выводе должна появиться строка, указывающая на успешную авторизацию по публичному ключу:

Authenticated to SERVER_IP using "publickey".

После входа проверьте пользователя:

whoami

Использование нестандартного имени ключа

Если ключ создан с другим именем:

ssh-keygen -t ed25519 -f ~/.ssh/server_admin

подключение выполняется так:

ssh -i ~/.ssh/server_admin ADMIN_USER@SERVER_IP

Чтобы не указывать путь каждый раз, добавьте конфигурацию клиента.

Linux и macOS

Файл:

~/.ssh/config

Пример:

Host example-server
    HostName SERVER_IP
    User ADMIN_USER
    IdentityFile ~/.ssh/server_admin
    IdentitiesOnly yes

Подключение:

ssh example-server

Windows

Файл:

%USERPROFILE%\.ssh\config

Пример:

Host example-server
    HostName SERVER_IP
    User ADMIN_USER
    IdentityFile ~/.ssh/server_admin
    IdentitiesOnly yes

Использование ssh-agent

ssh-agent позволяет не вводить парольную фразу при каждом подключении.

Linux

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

macOS

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Windows PowerShell

Запустите службу:

Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent

Добавьте ключ:

ssh-add $HOME\.ssh\id_ed25519

Проверьте загруженные ключи:

ssh-add -l

Проверка подключения без пароля пользователя

Проверьте вход ещё раз:

ssh ADMIN_USER@SERVER_IP

Сервер не должен запрашивать пароль учётной записи. Если на приватном ключе установлена парольная фраза, клиент может запросить именно её.

Что делать при ошибке Permission denied

Проверьте:

  1. Публичный ключ действительно находится в ~/.ssh/authorized_keys.
  2. Каталог ~/.ssh имеет права 700.
  3. Файл authorized_keys имеет права 600.
  4. Файлы принадлежат нужному пользователю.
  5. Используется правильный приватный ключ.
  6. Сервер разрешает авторизацию по ключам.

Проверка параметра сервера:

sudo sshd -T | grep pubkeyauthentication

Ожидаемый результат:

pubkeyauthentication yes

Проверка журналов Ubuntu:

sudo journalctl -u ssh --since "10 minutes ago" --no-pager

Важные рекомендации

  • не передавайте приватный ключ;
  • не отправляйте его в мессенджерах и электронной почте;
  • не храните приватный ключ в публичных репозиториях;
  • используйте парольную фразу;
  • создавайте отдельные ключи для разных администраторов;
  • удаляйте ключи сотрудников, которым больше не нужен доступ;
  • проверяйте новый вход до изменения настроек SSH-сервера.

Итог

После выполнения инструкции:

  • создана пара SSH-ключей;
  • публичный ключ добавлен на сервер;
  • права на файлы проверены;
  • вход по ключу подтверждён;
  • при необходимости настроен ssh-agent и клиентский файл config.

Отключение парольной авторизации и запрет входа root следует выполнять отдельно, только после успешной проверки доступа по ключу.

← Предыдущая статья Базовая настройка Ubuntu 24.04 после покупки VPS Следующая статья → Настройка Fail2ban для защиты SSH в Ubuntu