Ответ
В DevOps SSH-авторизация по ключам — стандартный и безопасный метод доступа к серверам, контейнерам и сетевым устройствам. Парольная аутентификация обычно отключается.
Процесс аутентификации по ключу:
- Подключение: Клиент инициирует соединение с SSH-сервером (
ssh user@host). - Обмен ключами сервера: Сервер отправляет свой публичный ключ. Клиент проверяет его по файлу
~/.ssh/known_hosts, чтобы избежать атак "man-in-the-middle". - Challenge-Response: Сервер генерирует случайную строку (challenge), шифрует её публичным ключом клиента (из
~/.ssh/authorized_keys) и отправляет клиенту. - Подпись: Клиент расшифровывает challenge своим приватным ключом (хранится в
~/.ssh/id_rsa), создаёт его хэш, подписывает этот хэш приватным ключом и отправляет подпись обратно. - Верификация: Сервер проверяет подпись с помощью публичного ключа клиента. Если проверка успешна — доступ granted.
Практическая настройка в DevOps:
- Генерация ключевой пары:
ssh-keygen -t ed25519 -C "devops-server-key" -f ~/.ssh/id_ed25519_devops - Деплой публичного ключа на целевой хост: Вручную или с помощью инструментов управления конфигурацией (Ansible, Terraform provisioner).
# Используя Ansible - authorized_key: user: deploy_user state: present key: "{{ lookup('file', '~/.ssh/id_ed25519_devops.pub') }}" - Использование SSH-агента: Для безопасного управления ключами без постоянного ввода парольной фразы.
eval $(ssh-agent) ssh-add ~/.ssh/id_ed25519_devops - Принцип наименьших привилегий: Ключи развертываются для служебных пользователей (например,
deployилиansible) с ограниченными правами, а не для root.