Руководство для начинающих по SSH-ключам: создание, использование и безопасное управление
Secure Shell (SSH) — это де-факто стандарт для безопасного удаленного доступа к серверам и другим сетевым устройствам. Хотя аутентификация по паролю является распространенной, она может быть уязвима для атак перебора и требует запоминания сложных паролей. SSH-ключи предлагают более надежную и удобную альтернативу, позволяя осуществлять аутентификацию без пароля и повышая вашу общую безопасность.
В этом руководстве мы рассмотрим основные шаги по созданию, развертыванию и управлению парами SSH-ключей. Понимая и внедряя эти практики, вы можете значительно повысить безопасность вашего удаленного доступа и оптимизировать рабочий процесс. Мы рассмотрим основные концепции, практические команды и лучшие практики, чтобы вы могли начать использовать аутентификацию по SSH-ключам.
Понимание пар SSH-ключей
Аутентификация по SSH-ключам основана на паре криптографических ключей: приватном ключе и публичном ключе. Эти ключи математически связаны, но вывести приватный ключ из публичного вычислительно невыполнимо.
- Приватный ключ: Этот ключ следует хранить в секрете и никогда не передавать. Он находится на вашем локальном компьютере и действует как ваше удостоверение. Когда вы инициируете SSH-соединение, ваш клиент использует ваш приватный ключ для подтверждения вашей личности.
- Публичный ключ: Этот ключ можно свободно распространять. Вы разместите свой публичный ключ на удаленных серверах, к которым хотите получить доступ. Когда вы пытаетесь подключиться, сервер использует ваш публичный ключ для проверки того, что у вас есть соответствующий приватный ключ.
Когда вы пытаетесь подключиться к серверу, происходит следующий процесс:
- Ваш SSH-клиент представляет серверу ваш публичный ключ.
- Сервер проверяет, авторизован ли этот публичный ключ (т. е. присутствует ли он в файле
authorized_keys). - Если авторизован, сервер отправляет вызов вашему клиенту.
- Ваш клиент использует ваш приватный ключ для шифрования вызова и отправляет зашифрованный ответ обратно на сервер.
- Сервер расшифровывает ответ, используя ваш публичный ключ. Если расшифровка прошла успешно и совпадает с исходным вызовом, аутентификация предоставляется без необходимости ввода пароля.
Создание пар SSH-ключей
Наиболее распространенным инструментом для создания пар SSH-ключей является ssh-keygen. Эта команда доступна в большинстве систем Linux, macOS и Windows (через WSL или Git Bash).
Использование ssh-keygen
Чтобы создать новую пару SSH-ключей, откройте терминал или командную строку и выполните следующую команду:
ssh-keygen -t ed25519
Разберем эту команду:
ssh-keygen: Команда для создания SSH-ключей.-t ed25519: Указывает тип создаваемого ключа.ed25519— это современный, высокозащищенный и быстрый алгоритм эллиптической криптографии. Другие распространенные варианты включаютrsa(например,ssh-keygen -t rsa -b 4096для RSA-ключа длиной 4096 бит).
После выполнения команды вам будет предложено ответить на несколько вопросов:
- Введите файл, в который следует сохранить ключ (например,
/home/your_user/.ssh/id_ed25519): Нажмите Enter, чтобы принять путь по умолчанию. Это создаст два файла в вашем каталоге.ssh:id_ed25519(ваш приватный ключ) иid_ed25519.pub(ваш публичный ключ). - Введите парольную фразу (пусто для отсутствия парольной фразы): Это важный шаг безопасности. Ввод парольной фразы шифрует ваш приватный ключ на диске. Если ваш файл приватного ключа когда-либо будет скомпрометирован, злоумышленнику все равно понадобится парольная фраза для его использования. Настоятельно рекомендуется использовать надежную парольную фразу.
- Введите ту же парольную фразу еще раз: Подтвердите свою парольную фразу.
Понимание выходных файлов
После создания в вашем каталоге ~/.ssh/ (или по указанному вами пути) будут созданы два файла:
id_ed25519(илиid_rsa): Ваш приватный ключ. НИКОГДА НЕ ПЕРЕДАВАЙТЕ ЭТОТ ФАЙЛ. Ограничьте его права доступа только для чтения для вашего пользователя.id_ed25519.pub(илиid_rsa.pub): Ваш публичный ключ. Это ключ, который вы будете распространять на серверы.
Защита вашего приватного ключа
Крайне важно убедиться, что ваш приватный ключ имеет правильные права доступа к файлу. В Linux/macOS выполните:
chmod 600 ~/.ssh/id_ed25519
Эта команда ограничивает права на чтение и запись только для владельца файла, предотвращая доступ к вашему приватному ключу других пользователей системы.
Развертывание вашего публичного ключа на сервере
После создания пары SSH-ключей вам нужно будет разместить ваш публичный ключ на удаленных серверах, к которым вы хотите получить доступ.
Использование ssh-copy-id (рекомендуется)
ssh-copy-id — это служебный скрипт, который упрощает процесс копирования вашего публичного ключа на удаленный сервер. Он автоматически добавляет ваш публичный ключ в файл ~/.ssh/authorized_keys на сервере и устанавливает правильные права доступа.
Чтобы использовать ssh-copy-id, выполните следующую команду с вашего локального компьютера:
ssh-copy-id user@remote_host
Замените user на ваше имя пользователя на удаленном сервере, а remote_host — на IP-адрес или имя хоста сервера. Вам будет предложено ввести пароль пользователя на remote_host в последний раз, чтобы авторизовать передачу ключа.
Если вы используете нестандартный SSH-порт (например, 2222), вы можете указать его с помощью опции -p:
ssh-copy-id -p 2222 user@remote_host
Ручное развертывание (если ssh-copy-id недоступен)
Если ssh-copy-id недоступен, вы можете скопировать ваш публичный ключ вручную. Сначала отобразите содержимое вашего публичного ключа на вашем локальном компьютере:
cat ~/.ssh/id_ed25519.pub
Скопируйте весь вывод. Затем войдите в свой удаленный сервер по SSH, используя свой пароль:
ssh user@remote_host
После входа в систему создайте каталог .ssh, если он не существует, а затем создайте или добавьте в файл authorized_keys:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
Теперь вставьте содержимое вашего публичного ключа в файл authorized_keys. Вы можете сделать это с помощью текстового редактора, такого как nano или vim:
nano ~/.ssh/authorized_keys
Вставьте скопированный публичный ключ на новую строку. Сохраните и выйдите из редактора.
Наконец, убедитесь, что файл authorized_keys имеет правильные права доступа:
chmod 600 ~/.ssh/authorized_keys
После выполнения этих шагов вы сможете подключаться к серверу по SSH без пароля.
Подключение с использованием SSH-ключей
После того как ваш публичный ключ будет размещен на сервере, вы сможете подключаться, используя ваш приватный ключ. SSH-клиент автоматически попытается использовать ключи, найденные в ~/.ssh/.
ssh user@remote_host
Если вы использовали парольную фразу при создании ключа, вам будет предложено ввести ее сейчас. Если вы не использовали парольную фразу, вы будете залогинены напрямую.
Указание другого ключа
Если у вас есть несколько пар SSH-ключей или ваш ключ находится не в стандартном расположении, вы можете указать, какой приватный ключ использовать, с помощью опции -i:
ssh -i /path/to/your/private_key user@remote_host
Управление SSH-ключами
По мере доступа к большему количеству серверов вы будете накапливать больше SSH-ключей. Эффективное управление является ключом к поддержанию безопасности и удобства.
SSH-агент
SSH-агент — это фоновая программа, которая хранит ваши приватные ключи в памяти, расшифрованные с помощью вашей парольной фразы. Это позволяет вам использовать ваши ключи для нескольких SSH-соединений, не вводя парольную фразу каждый раз.
- Запуск SSH-агента: Агент часто запускается автоматически при входе в вашу настольную среду. Если нет, вы можете запустить его вручную:
bash eval "$(ssh-agent -s)" - Добавление ключей в агент: После запуска агента добавьте ваши приватные ключи:
bash ssh-add ~/.ssh/id_ed25519
Вам будет предложено ввести вашу парольную фразу. После этого агент будет управлять ключом, и последующие SSH-соединения будут использовать его автоматически.
Конфигурационный файл SSH (~/.ssh/config)
Файл конфигурации SSH-клиента (~/.ssh/config) позволяет определять псевдонимы для хостов и указывать параметры соединения, включая, какой ключ использовать для конкретного хоста. Это чрезвычайно полезно для управления несколькими серверами.
Создайте или отредактируйте файл ~/.ssh/config на вашем локальном компьютере и добавьте записи, подобные этой:
# Настройки по умолчанию
Host *
ForwardAgent yes
ServerAliveInterval 60
# Сервер 1: Веб-сервер
Host webserver
HostName 192.168.1.100
User webadmin
Port 2222
IdentityFile ~/.ssh/webserver_key
# Сервер 2: Сервер баз данных
Host dbserver
HostName db.example.com
User dbuser
IdentityFile ~/.ssh/db_key
С этой конфигурацией вы можете подключиться к веб-серверу, используя:
ssh webserver
И к серверу баз данных, используя:
ssh dbserver
SSH-клиент автоматически использует правильное имя пользователя, порт и файл приватного ключа, как указано в файле ~/.ssh/config.
Смена и отзыв ключей
- Смена: Регулярно рассматривайте возможность смены ваших SSH-ключей, особенно для высокочувствительных систем. Это включает создание новых ключей и замену старых публичных ключей на серверах.
- Отзыв: Если приватный ключ скомпрометирован или вам больше не нужен доступ, вы должны удалить соответствующий публичный ключ из всех файлов
authorized_keysна серверах, на которые он был развернут. Это имеет решающее значение для поддержания безопасности.
Лучшие практики и советы по безопасности
- Используйте парольные фразы: Всегда защищайте ваши приватные ключи надежными парольными фразами. Это ваша основная защита от несанкционированного использования, если файл приватного ключа украден.
- Безопасные права доступа к приватному ключу: Убедитесь, что ваш файл приватного ключа имеет права доступа
600(-rw-------). - Используйте
ssh-agent: Используйте SSH-агент, чтобы избежать многократного ввода парольной фразы. - Отключите аутентификацию по паролю: Как только аутентификация по SSH-ключам будет работать, рассмотрите возможность отключения аутентификации по паролю на ваших серверах для дополнительного уровня безопасности.
- Обновляйте ключи: Используйте современные, надежные алгоритмы, такие как Ed25519. Избегайте старых RSA-ключей без достаточной длины бита (минимум 4096).
- Будьте внимательны к
authorized_keys: Добавляйте в ваш файлauthorized_keysтолько публичные ключи из доверенных источников. - Регулярные аудиты: Периодически проверяйте файлы
authorized_keysна ваших серверах, чтобы убедиться, что присутствуют только авторизованные ключи.
Заключение
SSH-ключи — это мощный инструмент для повышения безопасности и удобства управления удаленными серверами. Освоив создание, развертывание и управление парами SSH-ключей с помощью таких инструментов, как ssh-keygen и ssh-copy-id, вы можете перейти от аутентификации по паролю к более безопасным и эффективным рабочим процессам удаленного доступа. Помните о приоритете безопасности, используя надежные парольные фразы и защищая ваши приватные ключи.