Что такое SSH и как он используется в DevOps?

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

Ответ

SSH (Secure Shell) — это криптографический сетевой протокол для безопасного удаленного выполнения команд, управления системами и безопасной передачи файлов.

Ключевое применение SSH в DevOps:

  • Удаленное управление серверами: Основной способ доступа к Linux/Unix-серверам для администрирования.
  • Безопасное выполнение команд: Автоматизация задач через инструменты вроде Ansible, который использует SSH для подключения к хостам.
  • Туннелирование (SSH Tunnels / Port Forwarding): Создание зашифрованных каналов для безопасного доступа к внутренним сервисам (базам данных, веб-интерфейсам) или обхода ограничений сети.
  • Передача файлов: Использование scp или sftp для безопасного копирования конфигураций, логов, артефактов сборки.
  • Git-операции: Многие Git-серверы используют SSH-ключи для аутентификации при операциях git clone, git push.

Практика безопасного использования SSH-ключей:

  1. Использование ключей вместо паролей: Аутентификация по ключу криптографически надежнее.
  2. Защита приватных ключей: Приватный ключ (id_rsa) должен иметь права 600 и никогда не передаваться.
  3. Использование агента SSH (ssh-agent): Позволяет кэшировать ключ в памяти, избегая его постоянного хранения на диске и многократного ввода парольной фразы.

Пример рабочего процесса с SSH-агентом и Ansible:

# 1. Генерация ключа (если нет)
ssh-keygen -t ed25519 -C "devops@company" -f ~/.ssh/id_ed25519

# 2. Добавление публичного ключа на целевой сервер
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@production-server

# 3. Запуск ssh-agent и добавление ключа (часто делается автоматически в сессии)
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

# 4. Теперь можно безопасно подключиться без пароля или запустить Ansible-плейбук
ssh user@production-server
ansible-playbook -i inventory deploy.yml

Конфигурация для повышения безопасности (~/.ssh/config):

Host prod-
    HostName %h.example.com
    User deploy-user
    IdentityFile ~/.ssh/id_ed25519_prod
    Port 2222 # Нестандартный порт
    # Отключение менее безопасных методов аутентификации
    PasswordAuthentication no
    PubkeyAuthentication yes