Введение / Зачем это нужно
Использование SSH‑ключей значительно повышает безопасность удалённого доступа к Linux‑серверам по сравнению с паролями. Приватный ключ остаётся только у вас, а публичный можно разместить на любом хосте. После настройки вы сможете подключаться без ввода пароля, что ускоряет работу и устраняет риски подбора паролей.
Требования / Подготовка
- Операционная система: любая современная дистрибутивная система Linux (Ubuntu, Debian, CentOS и т.д.).
- Права пользователя: необходимо иметь права sudo для редактирования
/etc/ssh/sshd_configи перезапуска службы. - Инструменты: установлен SSH‑клиент (
ssh,ssh-keygen,ssh-copy-id). - Сеть: возможность подключиться по SSH к целевому серверу (порт 22 должен быть открыт).
Пошаговая инструкция
Шаг 1: Генерация SSH-пары ключей
Создайте новую пару RSA‑ключей размером 4096 бит. Команда также позволяет добавить комментарий, чтобы отличить ключи на разных хостах.
ssh-keygen -t rsa -b 4096 -C 'comment@host'
Следуйте подсказкам мастера: укажите путь (по умолчанию ~/.ssh/id_rsa) и, при желании, защитите ключ фразой.
Шаг 2: Защита приватного ключа
Правила по умолчанию могут быть слишком открытыми. Установите строгие права, чтобы только вы могли работать с ключами.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
Шаг 3: Копирование публичного ключа на удалённый сервер
Самый простой способ — использовать ssh-copy-id. Утилита автоматически добавит публичный ключ в ~/.ssh/authorized_keys.
ssh-copy-id user@host
Если утилита недоступна, выполните ручную копию:
cat ~/.ssh/id_rsa.pub | ssh user@host 'cat >> ~/.ssh/authorized_keys'
Шаг 4: Проверка настройки сервера SSH
Убедитесь, что сервер настроен на использование публичных ключей. Откройте конфигурационный файл и найдите строку PubkeyAuthentication.
sudo nano /etc/ssh/sshd_config
Если строка закомментирована, раскомментируйте её и установите значение yes:
PubkeyAuthentication yes
Перезапустите службу, чтобы изменения вступили в силу:
sudo systemctl restart sshd
Шаг 5: Подключение с использованием ключа
Теперь вы можете подключаться без пароля:
ssh user@host
Если при приватном ключе установлена фраза, SSH‑клиент запросит её ввод один раз.
Проверка результата
- Успешное подключение: если терминал отображает приглашение
user@host, всё работает. - Проверка ключа на сервере: на целевом хосте выполните команду
cat ~/.ssh/authorized_keys— вы должны увидеть строку с вашим публичным ключом. - Тест без пароля: выполните
ssh -i ~/.ssh/id_rsa user@host— пароль не потребуется.
Возможные проблемы
- Неправильные права доступа: если права на
~/.sshне700или наauthorized_keysне600, SSH отклонит ключ. Исправьте права командамиchmod 700 ~/.sshиchmod 600 ~/.ssh/authorized_keys. - Отсутствие
ssh-copy-id: используйте ручную копию, описанную в шаге 3. PubkeyAuthentication no: отредактируйте/etc/ssh/sshd_config, установитеyesи перезапуститеsshd.- Блокировка брандмауэра: убедитесь, что порт 22 открыт на целевом хосте (
iptables,firewalldили облачные группы безопасности). - Разные ключи: убедитесь, что вы копируете именно тот публичный ключ, который соответствует приватному (
id_rsa.pub). Повторное копирование перезапишет старый ключ вauthorized_keys.