Введение / Зачем это нужно
Использование SSH-ключей вместо паролей значительно повышает безопасность удалённого доступа. Ключи устраняют риск угадывания паролей, позволяют автоматизировать сценарии и ускоряют процесс входа в систему. После настройки вы сможете подключаться к любому поддерживаемому хосту одним щелчком, не вводя пароль.
Требования / Подготовка
- Операционные системы: Ubuntu 20.04+, Debian 11+, CentOS 8+, Fedora 38+
- Права пользователя: Необходима учётная запись с правами sudo для редактирования SSH-конфигурации.
- Предустановленные инструменты:
ssh,ssh-keygen,ssh-copy-id(установляются черезopenssh-client/openssh-server). - Доступ к удалённому хосту: Уже имеющийся SSH-доступ к целевому серверу (можно с использованием пароля для начальной настройки).
Пошаговая инструкция
Шаг 1: Генерация SSH-ключей
Создайте пару ключей Ed25519 (рекомендуется) или RSA.
ssh-keygen -t ed25519 -C "my-linux-host"
Примите стандартное местоположение (~/.ssh/id_ed25519) и, при желании, защитите ключ фразой. Для RSA:
ssh-keygen -t rsa -b 4096 -C "my-linux-host"
Шаг 2: Копирование публичного ключа
Быстрее всего использовать ssh-copy-id.
ssh-copy-id user@host
При запросе введите пароль для удалённого хоста — утилита автоматически добавит ваш публичный ключ в ~/.ssh/authorized_keys.
Если ssh-copy-id недоступен, добавьте ключ вручную:
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Шаг 3: Настройка доступа на сервере
Откройте файл конфигурации SSH:
sudo nano /etc/ssh/sshd_config
Убедитесь, что установлены следующие параметры (или добавьте их):
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Сохраните изменения (Ctrl+X, Y, Enter) и перезапустите службу:
sudo systemctl restart sshd
Шаг 4: Подключение без пароля
Теперь попробуйте подключиться:
ssh user@host
Подключение должно завершиться без запроса пароля.
Проверка результата
- Успешный вход: Если вы вошли без запроса пароля, настройка прошла успешно.
- Проверка ключа на сервере: На удалённом хосте выполните:
ssh user@host "cat ~/.ssh/authorized_keys"
Убедитесь, что отображается ваш публичный ключ.
Возможные проблемы
ssh: Could not publickey– Проверьте, что ключ добавлен вauthorized_keysи права доступа600.Subsystem for sftp not found– Обе части настройки совпадают; ошибка часто появляется при использовании неправильного пользователя.Permission denied (publickey)– Убедитесь, что файл ключа защищён (chmod 600 ~/.ssh/id_ed25519) и что сервер настроен на приём ключей (PubkeyAuthentication yes).Задача завершилась с кодом 255послеssh-copy-id– Проверьте пароль и права доступа на удалённом хосте; возможно, в.sshотсутствуют правильные права (700).