Как сгенерировать и защитить SSH-ключи для удаленного доступа
Освойте безопасный удаленный доступ, научившись генерировать надежные пары SSH-ключей с помощью `ssh-keygen`. Это руководство охватывает лучшие практики выбора типов ключей (Ed25519), защиты вашего закрытого ключа с помощью кодовой фразы, эффективного развертывания открытого ключа с помощью `ssh-copy-id` и использования `ssh-agent` для бесшовной аутентификации. Обеспечьте защиту вашей инфраструктуры от атак методом перебора, внедрив управление доступом на основе ключей.
Как создавать и защищать SSH-ключи для удаленного доступа
Secure Shell (SSH) — это стандартный способ подключения к удаленным серверам. Если вы все еще используете пароли для повседневного доступа, SSH-ключи обеспечивают более надежную аутентификацию и устраняют риск угадывания пароля для этой учетной записи.
Это руководство покажет вам, как создавать SSH-ключи, защищать закрытый ключ парольной фразой, устанавливать открытый ключ на сервере и использовать ssh-agent, чтобы не вводить парольную фразу при каждом подключении.
Понимание пар SSH-ключей
Пара SSH-ключей состоит из двух различных компонентов:
- Закрытый ключ: Этот ключ никогда не должен передаваться. Он надежно хранится на вашем локальном компьютере и используется для подтверждения вашей личности удаленному серверу.
- Открытый ключ: Этот ключ свободно распространяется и загружается в файл
~/.ssh/authorized_keysна удаленном сервере (серверах), к которому вы хотите получить доступ. Сервер использует этот ключ для проверки подписи, созданной вашим закрытым ключом.
Выбор правильного алгоритма
При создании ключей выбирайте современный алгоритм. Ed25519 — хороший выбор по умолчанию для современных клиентов OpenSSH, поскольку он быстрый, компактный и широко поддерживается. RSA все еще работает и полезен, когда вам нужно подключиться к старым системам, которые не поддерживают Ed25519.
Шаг 1: Создание пары SSH-ключей
Утилита ssh-keygen является стандартным инструментом для создания пар SSH-ключей в Linux, macOS и Windows (через Git Bash или WSL).
Создание ключа Ed25519 (рекомендуется)
Чтобы создать современный ключ Ed25519, используйте следующую команду. Мы указываем тип ключа (-t ed25519) и предоставляем комментарий (-C), чтобы помочь идентифицировать назначение или владельца ключа:
ssh-keygen -t ed25519 -C "[email protected]_or_host_name"
При появлении запроса:
- Введите файл для сохранения ключа: Нажмите Enter, чтобы принять расположение по умолчанию (
/home/user/.ssh/id_ed25519). - Введите парольную фразу (рекомендуется): Установите надежную парольную фразу для ключей, используемых за пределами одноразовых лабораторных систем. Это шифрует ваш закрытый ключ, поэтому украденный файл ключа не может быть немедленно использован.
Создание ключа RSA (альтернатива)
Если требуется совместимость с очень старыми системами, вы можете создать ключ RSA, убедившись, что указали достаточную длину ключа (не менее 4096 бит):
ssh-keygen -t rsa -b 4096 -C "your_rsa_key_comment"
Выходные файлы ключей
После создания в вашем каталоге ~/.ssh/ создаются два файла (при условии использования значений по умолчанию):
id_ed25519(илиid_rsa): Ваш закрытый ключid_ed25519.pub(илиid_rsa.pub): Ваш открытый ключ
Лучшая практика безопасности: Никогда не передавайте файл без расширения
.pub. Установите строгие разрешения для вашего закрытого ключа с помощьюchmod 600 ~/.ssh/id_ed25519.
Шаг 2: Копирование открытого ключа на сервер
Удаленный сервер должен иметь ваш открытый ключ в файле ~/.ssh/authorized_keys, чтобы предоставить доступ.
Использование ssh-copy-id (самый простой способ)
Утилита ssh-copy-id автоматизирует процесс, обрабатывая создание каталогов и настройку разрешений на удаленном сервере. Вам нужно будет аутентифицироваться с помощью пароля в последний раз для этой начальной настройки.
ssh-copy-id user@remote_host_ip
В случае успеха команда сообщит вам, что ключи были добавлены. Теперь вы можете попытаться войти в систему.
Ручное копирование (если ssh-copy-id недоступен)
Если вы не можете использовать ssh-copy-id, вы можете вручную добавить содержимое открытого ключа. Сначала отобразите открытый ключ:
cat ~/.ssh/id_ed25519.pub
Затем войдите на удаленный сервер, используя свой пароль, и добавьте вывод в файл authorized_keys:
# На удаленном сервере
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Замените <PASTE_YOUR_PUBLIC_KEY_HERE> на фактическое содержимое ключа
echo "<PASTE_YOUR_PUBLIC_KEY_HERE>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Шаг 3: Обеспечение безопасности доступа с помощью ssh-agent
Ввод парольной фразы каждый раз при подключении к серверу становится утомительным. ssh-agent — это фоновая программа, которая безопасно хранит ваши расшифрованные закрытые ключи в памяти, позволяя вам использовать их без многократного ввода парольной фразы.
Запуск и использование ssh-agent
Убедитесь, что агент запущен: В большинстве современных систем Linux/macOS агент запускается автоматически при входе в систему. Вы можете проверить его статус, посмотрев переменные окружения:
echo $SSH_AUTH_SOCKДобавьте свой ключ в агент: Используйте команду
ssh-add, чтобы загрузить ваш закрытый ключ. Вам будет предложено ввести парольную фразу только один раз.ssh-add ~/.ssh/id_ed25519 # Enter passphrase for /home/user/.ssh/id_ed25519: ********** # Identity added: /home/user/.ssh/id_ed25519 (comment)Проверьте загруженные ключи:
ssh-add -l
Теперь, когда вы запускаете ssh user@remote_host_ip, соединение будет аутентифицироваться с использованием ключа, хранящегося в агенте, без запроса парольной фразы (до завершения сеанса агента).
Важные замечания по ssh-agent
- Зависимость от сеанса: Ключи, загруженные в агент, обычно доступны только для текущего сеанса терминала или сеанса входа в систему рабочего стола. Вам нужно будет повторно запустить
ssh-addпосле выхода из системы и повторного входа. - Время жизни ключа: Вы можете установить максимальное время жизни для ключей, хранящихся в агенте, с помощью флага
-t(например,ssh-add -t 1h ~/.ssh/id_ed25519сохраняет ключ загруженным в течение одного часа).
Расширенная безопасность: отключение аутентификации по паролю
После того как вы убедились, что аутентификация на основе ключей работает безупречно на всех необходимых серверах, самой надежной мерой безопасности является полное отключение входа по паролю. Это предотвращает атаки методом перебора паролей.
Подключитесь к вашему серверу через SSH, используя свой ключ.
Отредактируйте файл конфигурации демона SSH, обычно расположенный по адресу
/etc/ssh/sshd_config:sudo nano /etc/ssh/sshd_configНайдите и установите следующие директивы:
# Убедитесь, что это установлено в yes (обычно по умолчанию) PubkeyAuthentication yes # Отключите вход по паролю PasswordAuthentication noПроверьте конфигурацию перед перезапуском:
sudo sshd -tПерезапустите службу SSH, чтобы применить изменения. Имя службы обычно
sshdв системах семейства RHEL иsshв Debian/Ubuntu:sudo systemctl restart sshd # или sudo systemctl restart ssh
Предупреждение: Перед отключением аутентификации по паролю оставьте один работающий сеанс SSH открытым и подтвердите, что второй вход в систему работает с новым ключом. Если перезапуск не удастся или ключ окажется неверным, вам понадобится доступ через консоль или внеполосный доступ.
Следующие шаги
После того как ваш первый вход на основе ключа заработает, относитесь к SSH-ключам как к производственным учетным данным:
- Создавайте уникальную пару ключей для каждой основной системы или сервиса, к которому вы получаете доступ.
- Регулярно проверяйте файл
authorized_keysна критически важных серверах. - Удаляйте старые ключи, когда люди меняют роли или машины выводятся из эксплуатации.
- Используйте
ssh-add -tдля кратковременных сеансов агента на общих рабочих станциях.