Настройка 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
Проверьте:
- Публичный ключ действительно находится в
~/.ssh/authorized_keys. - Каталог
~/.sshимеет права700. - Файл
authorized_keysимеет права600. - Файлы принадлежат нужному пользователю.
- Используется правильный приватный ключ.
- Сервер разрешает авторизацию по ключам.
Проверка параметра сервера:
sudo sshd -T | grep pubkeyauthentication
Ожидаемый результат:
pubkeyauthentication yes
Проверка журналов Ubuntu:
sudo journalctl -u ssh --since "10 minutes ago" --no-pager
Важные рекомендации
- не передавайте приватный ключ;
- не отправляйте его в мессенджерах и электронной почте;
- не храните приватный ключ в публичных репозиториях;
- используйте парольную фразу;
- создавайте отдельные ключи для разных администраторов;
- удаляйте ключи сотрудников, которым больше не нужен доступ;
- проверяйте новый вход до изменения настроек SSH-сервера.
Итог
После выполнения инструкции:
- создана пара SSH-ключей;
- публичный ключ добавлен на сервер;
- права на файлы проверены;
- вход по ключу подтверждён;
- при необходимости настроен
ssh-agentи клиентский файлconfig.
Отключение парольной авторизации и запрет входа root следует выполнять отдельно, только после успешной проверки доступа по ключу.