Блог компании 3v-Hosting
Настройка доступа к серверу по SSH ключу
6 мин.
В современной цифровой инфраструктуре безопасный и автоматизированный доступ к серверу необходим системным администраторам, разработчикам и инженерам DevOps. Аутентификация на основе ключей SSH является наиболее распространенным и надежным способом. SSH-ключи повышают безопасность, устраняя необходимость входа по паролю, и позволяют упростить автоматизацию, особенно при управлении несколькими серверами или интеграции конвейеров CI/CD. В этой статье мы подробно рассмотрим настройку доступа к серверу с помощью ключей SSH и рассмотрим ее с практической и административной точек зрения.
Что такое SSH и аутентификации на основе ключей
SSH, или Secure Shell, - это протокол, обеспечивающий безопасный удаленный вход в систему и выполнение команд на удаленном сервере. По умолчанию SSH использует аутентификацию по паролю, но этот метод подвержен атакам перебора и утечке учетных данных. Аутентификация на основе ключей SSH - очевидный выбор: более безопасный и удобный.
Ключи SSH состоят из пар: закрытого ключа, который остается на клиентской машине и должен быть защищен, и открытого ключа, который размещается на сервере в специальном файле. Когда клиент пытается подключиться к серверу, сервер проверяет, существует ли соответствующий открытый ключ, и проверяет клиента по закрытому ключу. Если все совпадает, доступ предоставляется.
Управление открытыми ключами проще и безопаснее, чем работа с несколькими пользовательскими паролями, особенно при автоматизации управления доступом в распределенной инфраструктуре.
Генерация ключей SSH
Прежде чем настраивать сервер для доступа по ключу SSH, необходимо сгенерировать пару ключей. Обычно это делается на клиентской машине с помощью инструмента ssh-keygen, который по умолчанию доступен во всех основных Unix-подобных системах.
ssh-keygen -t rsa -b 4096 -C «your_email@example.com»
Эта команда генерирует 4096-битную пару ключей RSA с необязательным комментарием для идентификации. Процесс запрашивает расположение файла и кодовую фразу:
Расположение: По умолчанию ключ хранится в ~/.ssh/id_rsa (приватный) и ~/.ssh/id_rsa.pub (публичный).
Ключевая фраза: Необязательна, но настоятельно рекомендуется для дополнительной безопасности. С ее помощью закрытый ключ шифруется локально.
Кроме RSA, можно использовать другие алгоритмы, например ED25519 или ECDSA, для повышения производительности или усиления криптографических свойств. Например, ED25519 предлагает более короткие ключи с надежной защитой и все чаще используется для современных развертываний.
Копирование открытого ключа на сервер
После того как пара ключей сгенерирована, открытый ключ необходимо скопировать на целевой сервер. Это можно сделать вручную или с помощью средств автоматизации. Проще всего это сделать с помощью ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
Эта команда добавляет открытый ключ в файл ~/.ssh/authorized_keys указанного пользователя на сервере. Она также обеспечивает правильные права доступа к каталогу .ssh и файлу authorized_keys - оба эти параметра важны для успешной аутентификации.
В качестве альтернативы можно скопировать открытый ключ вручную:
cat ~/.ssh/id_rsa.pub | ssh user@remote_host «mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys»
С точки зрения безопасности очень важно, чтобы каталог ~/.ssh имел права 700, а authorized_keys был установлен на 600. В противном случае OpenSSH может отказаться использовать ключ для аутентификации.
Отключение проверки подлинности пароля (необязательно, но рекомендуется)
После того как доступ по SSH-ключам заработал, считается хорошей практикой полностью отключить аутентификацию по паролю, тем самым минимизировав поверхность атаки на сервер. Это настраивается в конфигурационном файле демона SSH:
sudo nano /etc/ssh/sshd_config
Найдите или добавьте следующие строки:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
После внесения изменений перезапустите службу SSH:
sudo systemctl restart sshd
Перед перезапуском службы SSH настоятельно рекомендуется протестировать доступ на основе ключей в отдельном терминале, особенно при работе с удаленными серверами, чтобы избежать блокировки из-за неправильной конфигурации.
Другие полезные статьи в нашем Блоге:
- Передача файлов с помощью SSH в Linux
- Краткое руководство по базовой настройке SSH на вашем сервере Debian
- Команда Linux scp и примеры ее использования
- Как использовать Rsync для синхронизации локальных и удаленных каталогов
Управление несколькими ключами и пользователями
В средах, где нескольким пользователям требуется доступ к одному серверу или где системы автоматизации (например, Ansible или CI/CD runners) требуют отдельного доступа, важно тщательно управлять открытыми ключами.
Каждый открытый ключ должен быть уникально идентифицируемым и может быть добавлен в файл authorized_keys вместе с комментарием:
ssh-rsa AAAAB3Nza... user1@laptop
ssh-ed25519 AAAAC3Nza... deploy-bot@ci
Для упрощения управления инструменты управления конфигурацией, такие как Ansible, Puppet или Chef, могут автоматически распределять и управлять ключами SSH на нескольких узлах. Кроме того, такие инструменты, как HashiCorp Vault или AWS Secrets Manager, обеспечивают безопасное хранение и ротацию ключей.
В средах с общим доступом целесообразно поддерживать политику истечения срока действия ключей SSH и регулярного аудита. Ключи, которые больше не нужны, следует удалять из authorized_keys, чтобы избежать неактуального доступа.
Использование конфигурации SSH для упрощения доступа
При частом обращении к нескольким серверам файл ~/.ssh/config на клиентской машине помогает упростить и управлять опциями SSH. Типичная запись может выглядеть следующим образом:
Host web-server
HostName 192.168.1.100
User ubuntu
IdentityFile ~/.ssh/id_rsa
Это позволяет подключаться с помощью веб-сервера ssh вместо того, чтобы каждый раз указывать полные параметры. Кроме того, вы можете указать номера портов, прыгающие хосты и другие полезные опции.
Например, чтобы подключиться через бастионный хост (jump host):
Host internal-server
HostName 10.0.0.2
User dev
IdentityFile ~/.ssh/dev_key
ProxyJump bastion-host
Лучшие практики безопасности
Несмотря на присущую SSH-ключам безопасность, следует соблюдать несколько лучших практик:
- Используйте надежную парольную фразу для закрытых ключей, особенно если они хранятся на ноутбуках или в общих системах.
- Избегайте входа в систему с правами root: Разрешайте аутентификацию только обычным пользователям, а затем повышайте привилегии с помощью sudo.
- Контролируйте доступ к SSH с помощью файлов журналов (/var/log/auth.log) или таких инструментов безопасности, как Fail2Ban, которые блокируют IP-адреса после нескольких неудачных попыток.
- Ограничьте диапазоны IP-адресов, с которых разрешен доступ к SSH, с помощью правил брандмауэра или sshd_config с параметрами AllowUsers или Match Address.
- Рассмотрите возможность использования аппаратных модулей безопасности (HSM) или YubiKeys для хранения закрытых ключей, особенно в средах с высоким уровнем безопасности.
В облачных средах такие провайдеры, как AWS, Google Cloud и Azure, предлагают собственные механизмы введения ключей и управления их жизненным циклом, которые интегрируются с метаданными экземпляра или политиками на основе идентификации. Даже в самоуправляемом хостинге некоторые платформы позволяют вводить SSH-ключи при создании ВМ, что идеально подходит для эфемерной инфраструктуры.
Заключение
Настройка доступа к серверу с помощью аутентификации по SSH-ключам - один из основополагающих навыков в системном администрировании и облачных вычислениях. Она повышает безопасность, позволяет автоматизировать и упрощает управление в разных средах. Поймите, как генерировать, устанавливать и управлять ключами SSH для создания более надежных и безопасных инфраструктур.
В сочетании с другими методами обеспечения безопасности, такими как двухфакторная аутентификация, ограничение доступа к IP-адресам и автоматическая инициализация, доступ к SSH-ключам становится основным компонентом безопасной системы. Управление персональным VPS или целым парком корпоративных серверов требует мастерства в настройке ключей SSH для достижения операционного совершенства в современном вычислительном ландшафте.