Безопасный SSH-доступ к серверу с промежуточной удаленной машины (возможно, с Yubikey)

Вопрос или проблема

Я занимаюсь удаленной разработкой на удаленной машине для разработчиков. С этой удаленной машины мне нужно подключаться по SSH к другим серверам и службам, таким как Github. Все находится в Интернете. Мой настольный компьютер гораздо более безопасен, чем удаленная машина для разработчиков, и поэтому я не хочу хранить закрытые SSH ключи на удаленной машине для разработчиков.

Схема выглядит так:

Настольный компьютер с Windows -> Удаленная машина для разработчиков -> Github/другие серверы.

Я вижу несколько вариантов:

  1. Пересылка SSH-агента с аутентификацией через Yubikey: ssh -A remote_dev

Проблема этого подхода в том, что ssh-agent на моем настольном компьютере содержит много ключей. Я хочу пересылать только определенные ключи на удаленную машину для разработчиков. Например, я хочу, чтобы только ключ от github был доступен на удаленной машине. Но странно, что я не нашел способа пересылать только определенные ключи.

  1. SSH Jump: На удаленной машине для разработчиков я выполняю ssh -J my_desktop github.com

Это кажется более безопасным, и, вероятно, это работает с Yubikey. Но мне нужно открыть доступ по SSH к моему настольному компьютеру, что является риском.

  1. В идеале, мне хотелось бы, чтобы закрытые ключи, которые будут использоваться на удаленной машине для разработчиков, либо требовали аутентификации через Yubikey, либо, что еще лучше, физически хранились на Yubikey. Но я не знаю, будет ли Yubikey работать с удаленной машиной. Возможно, будет работать некоторый тип удаленной пересылки USB?

Ни один из этих вариантов не кажется идеальным. У кого-нибудь есть идеи?

Я не рекомендую пересылать агенты или копировать ключи. Если вы все же решите это сделать, рассмотрите возможность использования специализированного агента, который будет хранить только соответствующий ключ(и).

Предполагая, что вы используете WSL или какую-либо другую командную строку, совместимую с OpenSSH, вы можете просто выполнить ssh -J remote_dev other_server. Это подключит вашу локальную систему к other_server, используя remote_dev в качестве промежуточного узла. Удаленная машина будет видеть только зашифрованный трафик между вашей системой и other_server. Это позволяет использовать ваши локальные ключи и связку ключей с other_server. Вы можете быть более конкретным и указать ваш локальный ключ с помощью ssh -i /path/to/keyfile -J remote_dev other_server

Чтобы сделать это с использованием YubiKey, вам следует создать ключ типа ed25519_sk (ssh-keygen -t ed25519-sk). Вот краткое руководство по использованию YubiKey для SSH аутентификации и еще одно руководство по использованию YubiKey PIV с родным SSH-клиентом Windows для дополнительной помощи.

Если вы используете PuTTY, существует конфигурационная панель прокси, которая позволяет имитировать опцию -J OpenSSH.

Ответ или решение

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

1. SSH Agent Forwarding с использованием YubiKey

Хотя использование перенаправления агента SSH (ssh -A remote_dev) кажется простым решением, это не рекомендуется, так как ваш локальный SSH-агент может содержать множество ключей, что увеличивает риск доступа. Однако, если вы хотите использовать этот метод, можете создать специальный агент, который будет хранить только ключи, необходимые для доступа на удаленной машине.

2. SSH Jump (Прыжок через SSH)

Этот метод предлагает лучший уровень безопасности. Вы можете использовать:

ssh -J my_desktop github.com

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

3. Хранение ключей на YubiKey

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

ssh-keygen -t ed25519-sk

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

Дополнительные рекомендации

  • Удаленное USB-пересылка: Для передачи YubiKey через SSH, вы можете попробовать технологии типа USB-over-IP или другие решения по пересылке USB, но эти методы могут быть сложными в настройке и не всегда надежны.

  • Использование PuTTY: Если вы используете PuTTY, в его версии есть возможность настроить прокси, что позволит использовать аналог опции -J в OpenSSH.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...