Как происходит авторизация по SSH?

«Как происходит авторизация по SSH?» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps SSH-авторизация по ключам — стандартный и безопасный метод доступа к серверам, контейнерам и сетевым устройствам. Парольная аутентификация обычно отключается.

Процесс аутентификации по ключу:

  1. Подключение: Клиент инициирует соединение с SSH-сервером (ssh user@host).
  2. Обмен ключами сервера: Сервер отправляет свой публичный ключ. Клиент проверяет его по файлу ~/.ssh/known_hosts, чтобы избежать атак "man-in-the-middle".
  3. Challenge-Response: Сервер генерирует случайную строку (challenge), шифрует её публичным ключом клиента (из ~/.ssh/authorized_keys) и отправляет клиенту.
  4. Подпись: Клиент расшифровывает challenge своим приватным ключом (хранится в ~/.ssh/id_rsa), создаёт его хэш, подписывает этот хэш приватным ключом и отправляет подпись обратно.
  5. Верификация: Сервер проверяет подпись с помощью публичного ключа клиента. Если проверка успешна — доступ 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.