Введение / Зачем это нужно
SSH-ключи стали стандартом безопасного удалённого администрирования. Вместо паролей они обеспечивают беспарольный вход, защищают скрипты и CI/CD пайплайны, а также снижают риск перехвата учётных данных. После прочтения этого гайда вы сможете быстро сгенерировать ключевую пару, правильно её защитить и настроить для работы на любом Linux-хосте.
Требования / Подготовка
- OpenSSH клиент (
ssh-keygen) установлен (обычно присутствует в базовых системах). - Права обычного пользователя (для генерации ключей не требуются привилегии root).
- Базовое знание терминала и понимание путей
~/.ssh.
Если ssh-keygen отсутствует, установите пакет подходящий для вашего дистрибутива (см. шаг 1).
Пошаговая инструкция
Шаг 1: Установка OpenSSH (если необходимо)
Если утилита ssh-keygen не найдена, выполните команду в терминале:
# Для Debian/Ubuntu
sudo apt update && sudo apt install -y openssh-client
# Для RHEL/Fedora/CentOS
sudo dnf install -y openssh-clients
После установки проверьте версию: ssh-keygen -v.
Шаг 2: Генерация SSH-ключевой пары
Откройте терминал и выполните команду генерации:
ssh-keygen -t rsa -b 4096 -C "user@example.com"
-t rsa— тип алгоритма (RSA).-b 4096— размер ключа (сильная защита).-C— комментарий (удобно для идентификации).- Примите стандартное имя файла (
Enter file in which to save the key) — обычно~/.ssh/id_rsa. - Придумайте мастер-пароль для приватного ключа, если вас об этом попросят.
Шаг 3: Настройка прав доступа к ключам
По умолчанию SSH создает ключи с правами 644. Для безопасности измените их:
chmod 600 ~/.ssh/id_rsa # только владелец может читать/писать
chmod 644 ~/.ssh/id_rsa.pub # публичный ключ — только для чтения
Проверьте права:
ls -l ~/.ssh
Результат должен показывать rw------- для приватного ключа и rw-r--r-- для публичного.
Шаг 4: Передача открытого ключа на удалённый хост
Самый простой способ — использовать ssh-copy-id:
ssh-copy-id user@remote.example.com
Если скриптовый режим не доступен, скопируйте публичный ключ вручную:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Убедитесь, что файл authorized_keys имеет права 644 и принадлежит правильному пользователю.
Шаг 5: Проверка подключения без пароля
Попробуйте беспарольное подключение:
ssh user@remote.example.com 'echo "Подключение успешно"'
Если вы видите сообщение Подключение успешно, SSH-аутентификация работает корректно.
Проверка результата
- Проверьте файл
authorized_keysна целевом хосте:ls -l ~/.ssh/authorized_keys. - Проверьте логи SSH на сервере (
/var/log/auth.logилиjournalctl -u sshd), чтобы убедиться в отсутствии ошибок аутентификации. - Проверьте локальный список агента:
ssh-add -Lдолжен содержать отпечаток вашего публичного ключа.
Возможные проблемы
| Симптом | Причина | Решение |
|---|---|---|
ssh-keygen: невозможно создать файл | Отсутствует каталог ~/.ssh или права на запись | Создайте каталог mkdir -p ~/.ssh и установите права chmod 700 ~/.ssh |
Permission denied (publickey) | Неправильные права на приватный ключ | Выполните chmod 600 ~/.ssh/id_rsa |
Invalid user при ssh-copy-id | Неправильное имя пользователя на удалённом хосте | Проверьте учётную запись на сервере (ssh user@host) |
Signature invalid | Ключ повреждён или использован в атаке | Удалите старый ключ (rm ~/.ssh/id_rsa*) и сгенерируйте новый |
Agent refused key | Ключ уже добавлен в агент или имеет дубликат | Выполните ssh-agent bash, затем ssh-add ~/.ssh/id_rsa |
Если проблема не решена, проверьте отпечаток ключа (ssh-keygen -l -f ~/.ssh/id_rsa.pub) и сравните с записью на сервере.