Что такое SSH-ключ и как он используется для аутентификации?

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

Ответ

SSH-ключ — это пара криптографических ключей (приватный и публичный), используемая для безопасной аутентификации на серверах по протоколу SSH вместо пароля. Это основа безопасного доступа в инфраструктуре DevOps.

Принцип работы:

  1. Приватный ключ (id_ed25519) — секретный, хранится только на клиентской машине у пользователя с строгими правами доступа (600).
  2. Публичный ключ (id_ed25519.pub) — несекретный, копируется на целевые серверы в файл ~/.ssh/authorized_keys.
  3. При подключении сервер, используя публичный ключ, создает криптографическую задачу, которую может решить только владелец соответствующего приватного ключа. Клиент доказывает владение, не передавая сам ключ.

Практическое применение и лучшие практики:

# 1. Генерация ключа (предпочтительный алгоритм Ed25519)
ssh-keygen -t ed25519 -a 100 -C "devops-engineer@company.com - prod access" -f ~/.ssh/id_prod_ed25519
# -a 100 увеличивает количество раундов KDF, усиливая защиту парольной фразы.

# 2. Копирование публичного ключа на сервер (используйте ssh-copy-id для безопасности)
ssh-copy-id -i ~/.ssh/id_prod_ed25519.pub user@production-server.com

# 3. Подключение с использованием конкретного ключа
ssh -i ~/.ssh/id_prod_ed25519 user@production-server.com

# 4. Использование SSH-агента для управления ключами в сессии
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_prod_ed25519  # Ключ добавляется в агент после ввода парольной фразы
# Теперь можно подключаться без повторного ввода фразы.

# 5. Настройка на сервере для повышения безопасности (в /etc/ssh/sshd_config):
# PasswordAuthentication no        # Отключить аутентитацию по паролю
# PubkeyAuthentication yes
# PermitRootLogin prohibit-password # Запретить root-логин с паролем

Почему это критически важно в DevOps:

  • Безопасность: Устойчивость к брут-форсу, невозможность перехвата пароля.
  • Автоматизация: Ключи позволяют скриптам и инструментам CI/CD (Jenkins, Ansible, Terraform) безопасно подключаться к серверам без интерактивного ввода.
  • Удобство и аудит: Можно использовать разные ключи для разных сред (dev/stage/prod), легко отзывать доступ, удаляя публичный ключ с сервера.