Ответ
Настройка доступа по SSH-ключу — базовая операция для управления инфраструктурой. Я делаю это так:
1. Генерация ключевой пары на локальной машине (ноутбук инженера):
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519_company -C "ivan.petrov@company.com"
# -t ed25519: более безопасный и быстрый алгоритм, чем RSA.
# -a 100: увеличивает количество раундов KDF, усиливая защиту ключа.
# -f: задает имя файла, чтобы отделить рабочий ключ от личных.
В результате создаются два файла: приватный id_ed25519_company и публичный id_ed25519_company.pub.
2. Копирование публичного ключа на целевой сервер:
ssh-copy-id -i ~/.ssh/id_ed25519_company.pub deploy@prod-web-01
Эта команда добавит содержимое публичного ключа в файл ~/.ssh/authorized_keys пользователя deploy на сервере.
3. Настройка сервера для повышения безопасности:
Редактирую /etc/ssh/sshd_config:
# Разрешаем аутентификацию по ключу
PubkeyAuthentication yes
# ОТКЛЮЧАЕМ парольную аутентификацию для пользователей sudo/deploy
PasswordAuthentication no
# Запрещаем вход под root
PermitRootLogin no
# Используем более современный протокол
KexAlgorithms curve25519-sha256@libssh.org
Применяю изменения: sudo systemctl reload sshd.
4. Подключение и проверка:
ssh -i ~/.ssh/id_ed25519_company deploy@prod-web-01
5. Дополнительные практики в продакшене:
- Используем HashiCorp Vault или Teleport для централизованной выдачи и ротации SSH-ключей с аудитом сессий.
- Настраиваем
AllowUsersилиAllowGroupsвsshd_configдля ограничения круга пользователей. - Все приватные ключи защищены паролем (passphrase), который управляется через ssh-agent.