Ответ
SSH-ключ — это пара криптографических ключей (приватный и публичный), используемая для безопасной аутентификации на серверах по протоколу SSH вместо пароля. Это основа безопасного доступа в инфраструктуре DevOps.
Принцип работы:
- Приватный ключ (
id_ed25519) — секретный, хранится только на клиентской машине у пользователя с строгими правами доступа (600). - Публичный ключ (
id_ed25519.pub) — несекретный, копируется на целевые серверы в файл~/.ssh/authorized_keys. - При подключении сервер, используя публичный ключ, создает криптографическую задачу, которую может решить только владелец соответствующего приватного ключа. Клиент доказывает владение, не передавая сам ключ.
Практическое применение и лучшие практики:
# 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), легко отзывать доступ, удаляя публичный ключ с сервера.