Безопасное SSH-подключение к серверу с помощью Kryptonite

SSH – основной способ подключения к удаленному серверу Linux. Чтобы обеспечить безопасность инфраструктуры, очень важно своевременно защитить этот канал. Как правило, для аутентификации по SSH на удаленном сервере используется пара из открытого и закрытого ключа. Открытый ключ добавляется в список ключей на удаленном сервере. Хранить закрытый ключ сложнее. Это одна из основных проблем аутентификации по SSH.

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

Часто для устранения этого риска безопасности в аутентификацию добавляют второй фактор.

Читайте также: Настройка многофакторной аутентификации SSH на Ubuntu 16.04

У этого метода есть два недостатка: стоимость установки и удобство использования. На каждом сервере инфраструктуры необходимо настроить взаимодействие OpenSSH с модулем OATH-TOTP PAM и загрузить на него общий закрытый ключ. Это трудоемкий процесс, и в нем можно допустить много ошибок. Кроме того, при каждой такой аутентификации SSH вам нужно открыть приложение на смартфоне, прочитать шестизначный код и ввести его в терминал. Это может значительно замедлить рабочий процесс.

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

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

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

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

Требования

  • Удаленный сервер Linux.
  • Смартфон (iOS 9.1+ или Android 6.0+).
  • Персональный компьютер macOS 10.10+, Ubuntu, Debian, RHEL, CentOS, Fedora или Kali Linux.

1: Генерирование пары ключей в Kryptonite

Сначала нужно загрузить приложение Kryptonite, перейдя на сайт проекта со смартфона.

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

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

2: Установка kr

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

Чтобы ознакомиться с содержимым сценария перед установкой, запустите команду:

curl https://krypt.co/kr > install_kr

Больше о сценарии и альтернативных методах его установки вы найдете в документации kr.

Установите kr:

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

Команда предложит включить push-уведомления. С их помощью Kryptonite будет отправлять подтверждения запросов.

3: Взаимодействие Kryptonite и локального компьютера

После установки kr введите:

kr pair

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

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

4: Тестирование ключей Kryptonite

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

ssh me.krypt.co

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

  • Allow Once – подтверждает текущий запрос на аутентификацию к me.krypt.co.
  • Allow for 1 hour – подтверждает текущий запрос и другие SSH-запросы с связанных с приложением машин в течение следующего часа. Вы по-прежнему будете получать уведомления о появлении новых запросов на аутентификацию, но они будут подтверждаться автоматически.
  • Reject – сбрасывает запрос, SSH-подключение прерывается.

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

5: Добавление открытого ключа Kryptonite на удаленный сервер

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

Для этого запустите команду:

kr add user@your_server_ip

Укажите имя пользователя и IP-адрес своего сервера.

После этого попробуйте подключиться к серверу по SSH:

ssh user@your_server_ip

При этом на смартфон должно прийти уведомление.

Заключение

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

Tags: ,