Как безопасно использовать SSH с криптонитом на DigitalOcean

Вступление

SSH - это основной способ подключения к удаленным серверам Linux. Защита этого канала имеет важное значение для поддержания безопасной инфраструктуры. Наиболее распространенный способ аутентификации на удаленном сервере через SSH - это использование пар открытого и закрытого ключей. Добавьте открытый ключ в список разрешенных ключей на удаленном сервере, и вы готовы к работе.

Более сложный вопрос - как надежно хранить свой закрытый ключ.

Обычно разработчики хранят свои закрытые ключи в каталоге~/.ssh. Однако вы можете прочитать свой закрытый ключ с помощью простой командыcat ~/.ssh/id_rsa. Любое приложение на вашем компьютере может потенциально прочитать ваш закрытый ключ SSH, даже если оно зашифровано парольной фразой.

Распространенным решением этой угрозы безопасности является добавление второго фактора (т.е. включениеmulti-factor authentication, or MFA). Недостатком этого является двоякое: стоимость установки и удобство использования. Для каждого создаваемого вами сервера вы должны настроить сервер OpenSSH на использование модуля OATH-TOTP PAM и загрузить на него общий секретный ключ. Это трудоемкий процесс, и есть много мест, где можно ошибиться. Кроме того, каждый раз, когда вы подключаетесь по SSH к вашему серверу, вы должны открыть приложение на своем телефоне, прочитать шестизначный код и ввести его в свой терминал. Это может значительно замедлить ваш рабочий процесс.

Чтобы избежать недостатков настройки MFA, разработчики часто используют аппаратные USB-модули безопасности (HSM), такие как NitroKey или YubiKey, для генерации и хранения пар открытых и закрытых ключей SSH. Это небольшие USB-устройства, которые содержат вашу пару ключей SSH. Каждый раз, когда вы хотите подключить SSH к серверу, вы подключаете USB-устройство к компьютеру и нажимаете кнопку на устройстве.

Но HSM стоят дорого; SSH-совместимые устройства стоят до 50 долларов США. Это еще одно устройство для переноски, и каждый раз, когда вы подключаетесь к серверу по SSH, вам необходимо подключить USB-устройство к компьютеру и нажать на нем физическую кнопку. USB HSM также обычно не имеют экрана дисплея, поэтому вы не знаете, какой логин вы на самом деле одобряете, и нет способа просмотреть журнал аудита того, к чему вы аутентифицировались.

Kryptonite - это новое решение для защиты вашего закрытого ключа SSH. Он бесплатный, простой в настройке, удобный для пользователя и имеет дополнительные встроенные средства защиты. Он не требует никаких изменений на стороне сервера и позволяет утверждать запросы входа в систему с помощью push-уведомлений на телефон (без открытия приложения). На вашем телефоне всегда есть известные хосты, независимо от того, с какого компьютера или сервера вы используете SSH.

В этом руководстве вы сгенерируете пару ключей SSH с Kryptonite на своем телефоне, соединяете телефон с локальным компьютером и используете Kryptonite для SSH в капле DigitalOcean.

Предпосылки

Чтобы следовать этому руководству, вам потребуется:

  • Одна DigitalOcean Droplet, работающая под любым дистрибутивом Linux.

  • Смартфон: iPhone (iOS 9.1 или выше) или Android (6.0 или выше).

  • Персональный компьютер под управлением MacOS (10.10 или выше), Ubuntu, Debian, RHEL, CentOS, Fedora или Kali Linux.

[[step-1 -—- generation-a-kryptonite-key-pair]] == Шаг 1. Создание пары ключей криптонита

Первый шаг - загрузить приложение Kryptonite, перейдя вget.krypt.co на свой телефон iOS или Android.

После установки приложения откройте его и нажмитеGenerate Key Pair, чтобы создать пару ключей Kryptonite SSH. Введите адрес электронной почты, если вы хотите идентифицировать свой открытый ключ с ним (или пропустите этот шаг).

Затем вам необходимо установить утилиту командной строки Kryptonite.

[[step-2 -—- install-kr]] == Шаг 2 - Установкаkr

Следующий шаг продолжается на вашем локальном компьютере. Вам необходимо установитьkr command line utility, который позволяет SSH аутентифицироваться с помощью ключа, хранящегося в Kryptonite. Вы можете установитьkr с помощью предпочитаемого вами менеджера пакетов (например,npm или`brew) or simply use `curl, как мы сделаем здесь).

По соображениям безопасности, если вы хотите проверить сценарий установки перед установкой, вы можете запуститьcurl https://krypt.co/kr > install_kr и посмотреть. Вы можете узнать больше о том, как это работает, и об альтернативных способах установки вthe kr documentation.

Когда будете готовы, установитеkr.

curl https://krypt.co/kr | sh

Вам будет предложено включить push-уведомления. Это необходимо для того, чтобы Kryptonite отправлял запросы на подтверждение входа через push-уведомления.

Теперь, когда у вас есть приложение, пара ключей иkr, следующим шагом будет сопряжение вашего компьютера с Kryptonite.

[[step-3 -—- pairing-kryptonite-with-your-computer]] == Шаг 3 - Сопряжение криптонита с вашим компьютером

После успешной установкиkr запустите:

kr pair

QR-код появится в терминале. Если окно вашего терминала маленькое, вам, возможно, придется увеличить его, чтобы весь QR-код был виден, или уменьшить размер шрифта.

В приложении Kryptonite нажмитеAllow Camera Access в нижней части экрана. Когда появится камера, отсканируйте QR-код в терминале. Через несколько секунд приложение Kryptonite покажет успешное соединение, и терминал распечатает ваш открытый ключ Kryptonite SSH.

Давайте проверим, что эта пара ключей работает.

[[step-4 -—- testing-ssh-with-kryptonite]] == Step 4 - Testing SSH with Kryptonite

Чтобы убедиться, что все работает, попробуйте подключиться по SSH к общедоступному серверуme.krypt.co:

ssh me.krypt.co

Вы заметите, что в приложении Kryptonite появляется запрос с просьбой утвердить SSH-аутентификацию с тремя вариантами:

  • Allow Once утверждает только этот запрос на вход вme.krypt.co.

  • Allow for 1 hour одобряет этот запрос и все остальные запросы входа по SSH от сопряженного компьютера в течение следующего часа. Вы все равно будете уведомлены, когда эти логины произойдут, но они будут утверждены автоматически.

  • Reject отклоняет этот запрос, и вход по SSH не выполняется (или возвращается к локальным ключам) на вашем компьютере.

КоснитесьAllow Once. Вы увидите успешный SSH-вход вme.krypt.co, который быстро выйдет из псевдоболочки и отобразит логотип щита.

Если вы заблокируете свое устройство и снова попытаетесь подключиться кme.krypt.co по SSH, оно отправит на ваше устройство push-уведомление с заданной командой с запросом вашего одобрения с экрана блокировки.

[[step-5 -—- add-your-kryptonite-pubkey-to-digitalocean]] == Шаг 5 - Добавление вашего открытого ключа Kryptonite в DigitalOcean

Теперь, когда Kryptonite подключен к вашему компьютеру, вы можете быстро добавить свой открытый ключ ко всем серверам и инструментам, которые вы используете по SSH.

Чтобы добавить ваш открытый ключ в DigitalOcean, выполните следующую команду:

kr digitalocean

Вы увидите вывод с инструкциями, специфичными для DigitalOcean, например:

OutputPublic key copied to clipboard.
Press ENTER to open your web browser to DigitalOcean.
Then click “Add SSH Key” and paste your public key.

Это то, что вам нужно сделать дальше:

  1. НажмитеENTER на своем терминале, чтобы автоматически перейти на страницу настроек DigitalOcean, при необходимости войдя в систему.

  2. ЩелкнитеAdd SSH Key.

  3. Вставьте свой открытый ключ Kryptonite.

  4. ЩелкнитеSave.

Вы можете найти подробные инструкции по добавлению вашего SSH-ключа вStep 3 of this SSH on DigitalOcean tutorial.

Загрузка вашего ключа в DigitalOcean позволяет легко добавить его в новую каплю. Просто установите флажок для своего ключа Kryptonite при создании сервера. Далее, давайте добавим этот ключ к существующей капле.

[[step-6 -—- add-your-kryptonite-pubkey-to-an-existing-droplet]] == Шаг 6 - Добавление вашего Kryptonite Pubkey в существующую каплю

Инструмент командной строкиkr можно использовать для добавления вашего открытого ключа Kryptonite к уже запущенной капле, к которой у вас есть доступ с помощью локального ключа SSH или пароля.

Выполните следующую команду, чтобы добавить ваш открытый ключ Kryptonite в файл авторизованных пользователей Droplet, убедившись в том, что вы подставили имя пользователя и IP-адрес Droplet.

kr add user@your_server_ip

После того, как вы это сделаете, проверьте, что это работает, попытавшись войти по SSH.

ssh user@your_server_ip

Вы получите запрос на вход в систему Kryptonite SSH на свой телефон.

Заключение

Теперь, когда вы настроили Kryptonite и успешно добавили свой открытый ключ Kryptonite в свою учетную запись DigitalOcean, теперь вы можете использовать SSH в любой из ваших капель с любого сопряженного компьютера.

Ваш закрытый ключ надежно хранится на вашем телефоне и никогда не покидает ваше устройство. Когда вы разрешаете запрос, закрытый ключ используется для криптографической подписи одноразового имени входа SSH на вашем устройстве. Эта подпись затем отправляется обратно на ваш компьютер для завершения аутентификации SSH.

Для получения дополнительной информации о том, как работает криптонит, взгляните наKryptonite’s system architecture blog post иKryptonite and kr source code.

Related