Где хранятся ключи ssh
Обновлено: 21.11.2024
Если вы не знаете, как просмотреть свои сертификаты SSH, Джек Валлен проведет вас по шагам в Linux, macOS и Windows.
Обязательно к прочтению статьи о безопасности
В некоторых случаях вам нужно будет просмотреть свои сертификаты SSH в Linux. Почему? Скажем, например, вам нужно добавить сертификат для аутентификации в GitHub (или любом другом онлайн-сервисе, который требует SSH-аутентификацию). Вы знаете, что создали эти SSH-сертификаты, но как их просмотреть?
Те, кто знаком с SSH, вероятно, уже знают ответ на этот вопрос. В конце концов, это довольно простой SSH-материал. Для тех, кто плохо знаком со способами SSH (или Linux, macOS или Windows, если на то пошло), эта задача может поставить вас в тупик.
Никогда не бойся, поэтому я здесь.
Я хочу показать вам, как легко просматривать эти SSH-ключи, чтобы вы могли использовать их для сторонних сервисов.
Что вам понадобится
Для этого вам потребуется только доступ к серверу или рабочему столу (Linux, macOS или Windows) и созданный ключ SSH. Если вы еще не создали пару ключей SSH, вы можете сделать это с помощью команды:
Эта команда создаст пару ключей, открытый и закрытый ключи. Открытый ключ — это тот, который вы отправляете на серверы для аутентификации по ключу SSH. Когда вы попытаетесь войти на этот сервер, SSH сравнит открытый и закрытый ключи. Если эти ключи совпадают, вам будет разрешен доступ. Достаточно просто. Вы готовы двигаться дальше.
Как просмотреть открытый ключ SSH в Linux
Есть два простых способа просмотреть открытый ключ SSH в Linux. Первый метод немного сложен, потому что он использует обе команды ssh-agent и ssh-add. Это, вероятно, излишне для того, что вам нужно, но это хороший способ просмотреть ключ, требуя при этом пароль вашей пары ключей SSH. Команда:
ssh-agent sh -c 'ssh-add; ssh-добавить -L'
После успешной аутентификации ваш открытый ключ SSH будет распечатан в терминале. Затем вы можете скопировать это и вставить туда, где вам нужно. Конечно, нужно запомнить множество команд, особенно если вам нужно просто просмотреть содержимое открытого ключа.
Если вы не хотите запоминать еще одну команду, вы можете просто использовать команду cat следующим образом:
Приведенная выше команда распечатает ваш SSH-ключ на вашем компьютере с Linux, не запрашивая пароль для аутентификации вашего ключа.
Как просмотреть открытый ключ SSH в macOS
Просмотр ваших ключей в macOS можно выполнить так же, как и в Linux. Откройте окно терминала и введите команду:
Где USERNAME — ваше имя пользователя macOS.
Приведенные выше команды распечатают ваш открытый ключ SSH.
В macOS есть еще одна изящная хитрость. Вы можете скопировать содержимое ключа SSH прямо в буфер обмена, не отображая ключ, с помощью инструмента pbcopy. Эта команда будет:
кошка ~/.ssh/id_rsa.pub | копировать
Скопировав ключ в буфер обмена, вы можете вставить его в любое место.
Как просмотреть открытый ключ SSH в Windows
В Windows вы будете использовать команду type для просмотра открытого ключа SSH следующим образом:
Где USERNAME – это имя вашего пользователя.
Приведенная выше команда отобразит ваш открытый ключ SSH. Затем вы можете использовать сочетание клавиш Ctrl+c, чтобы скопировать содержимое файла.
Вы также можете сделать что-то похожее на то, что мы делали в macOS (скопировать открытый ключ SSH непосредственно в буфер обмена), используя команды type и clip следующим образом:
введите C:UsersUSERNAME.sshid_rsa.pub | клип
Где USERNAME — ваше имя пользователя.
Теперь вы можете вставить этот ключ в любое место.
Как просмотреть свой закрытый ключ
Возможно, вам никогда не придется просматривать свой закрытый ключ. В конце концов, это секрет соуса, который никто не выставляет напоказ. Но если вам нужно просмотреть этот ключ, вы можете выполнить те же действия, что и выше, но удалить .pub из имени файла (в любом случае). Помните, что id_rsa — это закрытый ключ, а id_rsa.pub — открытый ключ.
Это все, что нужно для просмотра открытых и закрытых ключей SSH в Linux, macOS и Windows.
Не забывайте обращаться с этими ключами так, как они того заслуживают. Хотя ваш открытый ключ будет передан другим пользователям и службам, этот закрытый ключ необходимо спрятать и никогда не показывать общественности. Если вы случайно выпустите этот закрытый ключ, вам потребуется удалить открытый ключ из файла author_keys с каждого сервера, использующего эту пару ключей, удалить открытый и закрытый ключи на хосте, сгенерировать новую пару ключей и отправить ее на сервер. серверы, на которые вам нужно войти с аутентификацией по ключу SSH. Если вы оставите какие-либо следы этой скомпрометированной пары ключей на каком-либо сервере или рабочем столе, вы рискуете открыть доступ кому-либо.
Информационный бюллетень Cybersecurity Insider
Укрепите защиту ИТ-безопасности своей организации, следя за последними новостями, решениями и рекомендациями в области кибербезопасности.
Доставка по вторникам и четвергам
Изображение: iStock/Stock Depot
Я начинаю понимать, как работают системы RSA и открытых/закрытых ключей, и мне стало интересно, где хранятся мои закрытый и открытый ключи SSH. Когда я иду в свой домашний каталог и просматриваю свой каталог .ssh (cd .ssh), я вижу только файл «known_hosts», который, как я полагаю, содержит открытые ключи различных удаленных SSH-серверов, которые я знаю.
Где я могу найти эти ключи? Кстати, я даже не помню, чтобы их создавал, но поскольку я уже устанавливал ssh-соединения раньше, они должны быть где-то.
Я использую OpenSSH_5.2p1 с MAC OS 10.6.
3 ответа 3
Обычно ~/.ssh/id_rsa и ~/id_rsa.pub. Но из этого не следует, что ssh должен создавать пару и сохранять их: ssh в основном использует протокол SSL, который устанавливает сеансовый ключ с использованием алгоритма обмена ключами Диффи/Хеллмана или его варианта. Это означает, что рукопожатие, устанавливающее соединение, генерирует ключ сеанса и отбрасывает его после завершения сеанса.
Прочитайте об алгоритме, он довольно изящный: с помощью довольно простой математики он устанавливает ключ, известный обоим концам соединения, даже не отправляя ключ по соединению.
Означает ли это, что если меня никогда не просили генерировать ключи SSH, RSA никогда не использовался? Другими словами, для обмена сеансовым ключом использовался какой-то асимметричный алгоритм, но временные открытый/закрытый ключи для подключения не хранились на моем компьютере?
Совершенно верно. На самом деле шифрование симметричное — асимметричные алгоритмы плохо подходят для потоковой передачи. Диффи-Хеллман используется для генерации сеансового ключа для симметричного шифрования. Если вместо этого вы используете пару открытого и закрытого ключей, они используются в другом рукопожатии для создания сеансового ключа для симметричного алгоритма.
@mieli: Нет. Их никогда не создавали. открытый ключ — это только один из многих возможных методов аутентификации; если вы просто вошли в систему, используя пароль или интерактивную клавиатуру, сам пароль был отправлен. (Примечание. Не путайте ключ пользователя, ключ хоста и ключи сеанса.)
@grawity, здесь мы в основном согласны, но давайте будем немного осторожны. Обмен ключами Диффи-Хеллмана связан с RSA и другими алгоритмами асимметричного шифрования и по существу является асимметричным, поскольку обе стороны обмена имеют свою «половину» возможного соглашения. Они действительно содержат две части ключа, а окончательный ключ и точный процесс его создания отбрасываются в конце сеанса. Однако они не являются общедоступной и частной частями пары RSA.
Ваши личные открытый и закрытый ключи ssh обычно хранятся в:
Или это могут быть id_rsa и id_rsa.pub, если вы создали ключи RSA, а не ключи DSA (OpenSSH поддерживает обе формы).
Но тот факт, что вы уже устанавливали ssh-соединения, не означает, что у вас есть ssh-ключи. Если команда ssh не может найти ваш личный ключ, она запросит у вас пароль для удаленной системы. Это менее безопасно, чем использование ключей.
Обычно следует создавать закрытый ключ ssh с парольной фразой. Если вы создадите его без парольной фразы, кто-то, кто получит копию вашего закрытого ключа, может выдать себя за вас. ssh-agent позволяет использовать ключ с парольной фразой без необходимости повторного ввода парольной фразы каждый раз, когда вы ее используете.
Если вы не создали пару ключей, возможно, у вас ее нет.
Трафик SSH2 шифруется с помощью симметричного сеансового ключа, установленного с использованием алгоритмов DH, ECDH или обмена ключами GSSAPI. Ни ключ хоста, ни ключ пользователя не используются для шифрования данных — их единственная цель — аутентификация.
Теперь помните, что SSH поддерживает несколько методов аутентификации: кроме общедоступного ключа, почти все серверы принимают простой пароль и/или интерактивную клавиатуру, при которой не происходит генерации или использования ключа — пароль просто отправляется на удаленный сервер. для проверки.
Другими словами, "поскольку я уже устанавливал ssh-соединения раньше, они должны где-то быть" неверно — для установления соединений не нужна пара ключей пользователя.
SSH, или безопасная оболочка, представляет собой зашифрованный протокол, используемый для администрирования и связи с серверами. При работе с сервером Linux вы часто можете проводить большую часть времени в сеансе терминала, подключенном к вашему серверу через SSH.
Хотя существует несколько различных способов входа на сервер SSH, в этом руководстве мы сосредоточимся на настройке ключей SSH. Ключи SSH обеспечивают чрезвычайно безопасный способ входа на ваш сервер. По этой причине мы рекомендуем этот метод для всех пользователей.
Как работают ключи SSH?
Сервер SSH может аутентифицировать клиентов, используя различные методы. Самым простым из них является аутентификация по паролю, которая проста в использовании, но не самая безопасная.
Несмотря на то, что пароли отправляются на сервер безопасным способом, они, как правило, не являются сложными или достаточно длинными, чтобы быть устойчивыми к повторяющимся, настойчивым злоумышленникам. Современная вычислительная мощность в сочетании с автоматизированными сценариями делает возможным взлом защищенной паролем учетной записи. Хотя существуют и другие методы дополнительной защиты (fail2ban и т. д.), ключи SSH представляют собой надежную и безопасную альтернативу.
Пары ключей SSH — это два криптографически безопасных ключа, которые можно использовать для аутентификации клиента на сервере SSH. Каждая пара ключей состоит из открытого ключа и закрытого ключа.
Закрытый ключ остается у клиента и должен храниться в абсолютной тайне. Любая компрометация закрытого ключа позволит злоумышленнику войти на серверы, настроенные с использованием соответствующего открытого ключа, без дополнительной аутентификации. В качестве дополнительной меры предосторожности ключ можно зашифровать на диске с помощью парольной фразы.
Связанный открытый ключ можно свободно передавать без каких-либо негативных последствий. Открытый ключ может использоваться для шифрования сообщений, которые может расшифровать только закрытый ключ. Это свойство используется как способ аутентификации с использованием пары ключей.
Открытый ключ загружается на удаленный сервер, на который вы хотите войти с помощью SSH. Ключ добавляется в специальный файл ~/.ssh/authorized_keys в учетной записи пользователя, в которую вы будете входить.
Когда клиент пытается пройти аутентификацию с помощью ключей SSH, сервер может проверить клиента на наличие закрытого ключа. Если клиент может доказать, что он владеет закрытым ключом, создается сеанс оболочки или выполняется запрошенная команда.
Шаг 1. Создание ключей SSH
Первым шагом для настройки аутентификации по ключу SSH на вашем сервере является создание пары ключей SSH на локальном компьютере.
Для этого мы можем использовать специальную утилиту ssh-keygen, которая входит в стандартный набор инструментов OpenSSH. По умолчанию будет создана пара ключей RSA длиной 3072 бита.
На локальном компьютере создайте пару ключей SSH, введя:
Утилита предложит вам выбрать место для ключей, которые будут сгенерированы. По умолчанию ключи будут храниться в каталоге ~/.ssh в домашнем каталоге вашего пользователя. Закрытый ключ будет называться id_rsa, а связанный с ним открытый ключ будет называться id_rsa.pub .
Обычно на этом этапе лучше придерживаться местоположения по умолчанию. Это позволит вашему SSH-клиенту автоматически находить ваши SSH-ключи при попытке аутентификации. Если вы хотите выбрать нестандартный путь, введите его сейчас, в противном случае нажмите клавишу ВВОД, чтобы принять путь по умолчанию.
Если вы ранее создали пару ключей SSH, вы можете увидеть следующее приглашение:
Если вы решите перезаписать ключ на диске, вы больше не сможете проходить аутентификацию с использованием предыдущего ключа. Будьте очень осторожны, выбирая «да», так как это разрушительный процесс, который невозможно обратить вспять.
Далее вам будет предложено ввести кодовую фразу для ключа. Это необязательная парольная фраза, которую можно использовать для шифрования файла закрытого ключа на диске.
- Закрытый ключ SSH (часть, которая может быть защищена парольной фразой) никогда не раскрывается в сети. Парольная фраза используется только для расшифровки ключа на локальном компьютере. Это означает, что сетевой перебор парольной фразы будет невозможен.
- Закрытый ключ хранится в каталоге с ограниченным доступом. Клиент SSH не распознает закрытые ключи, которые не хранятся в каталогах с ограниченным доступом. Сам ключ также должен иметь ограниченные права (чтение и запись доступны только для владельца). Это означает, что другие пользователи в системе не могут отслеживать.
- Любой злоумышленник, который хочет взломать секретную фразу-пароль SSH, должен уже иметь доступ к системе. Это означает, что у них уже будет доступ к вашей учетной записи пользователя или учетной записи root. Если вы находитесь в таком положении, парольная фраза может помешать злоумышленнику немедленно войти на другие ваши серверы. Мы надеемся, что это даст вам время для создания и внедрения новой пары ключей SSH и удаления доступа со скомпрометированного ключа.
Поскольку закрытый ключ никогда не раскрывается в сети и защищен с помощью прав доступа к файлам, этот файл никогда не должен быть доступен никому, кроме вас (и пользователя root). Парольная фраза служит дополнительным уровнем защиты в случае нарушения этих условий.
Фраза-пароль является необязательным дополнением.Если вы введете его, вам придется предоставлять его каждый раз, когда вы используете этот ключ (если только вы не используете программное обеспечение агента SSH, которое хранит расшифрованный ключ). Мы рекомендуем использовать парольную фразу, но если вы не хотите устанавливать парольную фразу, вы можете нажать клавишу ВВОД, чтобы обойти это приглашение.
Теперь у вас есть открытый и закрытый ключи, которые вы можете использовать для аутентификации. Следующим шагом является размещение открытого ключа на вашем сервере, чтобы вы могли использовать аутентификацию с помощью ключа SSH для входа в систему.
Шаг 2. Копирование открытого ключа SSH на ваш сервер
Примечание. В предыдущей версии этого руководства были инструкции по добавлению открытого ключа SSH в вашу учетную запись DigitalOcean. Эти инструкции теперь можно найти в разделе Ключи SSH нашей документации по продукту DigitalOcean.
Существует несколько способов загрузить открытый ключ на удаленный SSH-сервер. Используемый вами метод во многом зависит от доступных вам инструментов и сведений о вашей текущей конфигурации.
Все следующие методы дают одинаковый конечный результат. Сначала описывается самый простой и автоматизированный метод, а каждый из последующих требует дополнительных ручных действий. Вы должны следовать им, только если вы не можете использовать предыдущие методы.
Копирование открытого ключа с помощью ssh-copy-id
Самый простой способ скопировать ваш открытый ключ на существующий сервер — использовать утилиту ssh-copy-id . Этот метод рекомендуется из-за его простоты, если он доступен.
Инструмент ssh-copy-id включен в пакеты OpenSSH во многих дистрибутивах, поэтому он может быть уже доступен в вашей локальной системе. Чтобы этот метод работал, у вас должен быть доступ к серверу по SSH на основе пароля.
Чтобы использовать утилиту, вам необходимо указать удаленный хост, к которому вы хотите подключиться, и учетную запись пользователя, к которой у вас есть доступ по SSH на основе пароля. Это учетная запись, в которую будет скопирован ваш открытый SSH-ключ.
Вы можете увидеть следующее сообщение:
Это означает, что ваш локальный компьютер не распознает удаленный хост. Это произойдет при первом подключении к новому хосту. Введите yes и нажмите ENTER, чтобы продолжить.
Далее утилита просканирует вашу локальную учетную запись на наличие ключа id_rsa.pub, который мы создали ранее. Когда он найдет ключ, он запросит у вас пароль учетной записи удаленного пользователя:
Введите пароль (ваш ввод не будет отображаться в целях безопасности) и нажмите ENTER . Утилита подключится к учетной записи на удаленном хосте, используя предоставленный вами пароль. Затем он скопирует содержимое вашего ключа ~/.ssh/id_rsa.pub в файл в домашнем каталоге удаленной учетной записи ~/.ssh с именем author_keys .
Вы увидите вывод, который выглядит следующим образом:
На данный момент ваш ключ id_rsa.pub загружен в удаленную учетную запись. Вы можете перейти к следующему разделу.
Копирование открытого ключа с помощью SSH
Если у вас нет доступного ssh-copy-id, но у вас есть SSH-доступ на основе пароля к учетной записи на вашем сервере, вы можете загрузить свои ключи, используя обычный метод SSH.
Мы можем сделать это, выведя содержимое нашего открытого SSH-ключа на наш локальный компьютер и передав его через SSH-соединение на удаленный сервер. С другой стороны, мы можем убедиться, что каталог ~/.ssh существует под используемой нами учетной записью, а затем вывести содержимое, которое мы передали, в файл с именем author_keys внутри этого каталога.
Мы будем использовать символ перенаправления >> для добавления содержимого вместо его перезаписи. Это позволит нам добавлять ключи, не уничтожая ранее добавленные ключи.
Полная команда будет выглядеть так:
Вы можете увидеть следующее сообщение:
Это означает, что ваш локальный компьютер не распознает удаленный хост. Это произойдет при первом подключении к новому хосту. Введите yes и нажмите ENTER, чтобы продолжить.
После этого вам будет предложено ввести пароль учетной записи, к которой вы пытаетесь подключиться:
После ввода пароля содержимое вашего ключа id_rsa.pub будет скопировано в конец файла author_keys учетной записи удаленного пользователя. Если это удалось, перейдите к следующему разделу.
Копирование открытого ключа вручную
Если у вас нет доступного SSH-доступа к вашему серверу на основе пароля, вам придется выполнить вышеуказанный процесс вручную.
Содержимое вашего файла id_rsa.pub необходимо каким-то образом добавить в файл ~/.ssh/authorized_keys на удаленном компьютере.
Чтобы отобразить содержимое вашего ключа id_rsa.pub, введите его на локальном компьютере:
Вы увидите содержимое ключа, которое может выглядеть примерно так:
Доступ к удаленному хосту любым доступным способом. Это может быть веб-консоль, предоставленная вашим поставщиком инфраструктуры.
Примечание. Если вы используете дроплет DigitalOcean, см. нашу документацию по консоли восстановления в документации по продукту DigitalOcean.
После того как вы получите доступ к своей учетной записи на удаленном сервере, убедитесь, что каталог ~/.ssh создан. Эта команда создаст каталог, если это необходимо, или ничего не сделает, если он уже существует:
Теперь вы можете создать или изменить файл author_keys в этом каталоге. Вы можете добавить содержимое вашего файла id_rsa.pub в конец файла author_keys, создав его при необходимости, используя это:
В приведенной выше команде замените строку public_key_string выводом команды cat ~/.ssh/id_rsa.pub, которую вы выполнили в своей локальной системе. Он должен начинаться с ssh-rsa AAAA. или аналогичный.
Если это работает, вы можете перейти к тестированию новой аутентификации SSH на основе ключа.
Шаг 3. Аутентификация на вашем сервере с помощью ключей SSH
Если вы успешно выполнили одну из описанных выше процедур, вы сможете войти на удаленный хост без пароля удаленной учетной записи.
Процесс в основном такой же:
Если вы впервые подключаетесь к этому хосту (если вы использовали последний способ, описанный выше), вы можете увидеть что-то вроде этого:
Это означает, что ваш локальный компьютер не распознает удаленный хост. Введите yes и нажмите клавишу ВВОД, чтобы продолжить.
Если вы не указали парольную фразу для своего закрытого ключа, вы сразу же войдете в систему. Если вы указали парольную фразу для закрытого ключа при создании ключа, вам потребуется ввести ее сейчас. После этого для вас будет создан новый сеанс оболочки с учетной записью в удаленной системе.
В случае успеха продолжайте, чтобы узнать, как заблокировать сервер.
Шаг 4. Отключение аутентификации по паролю на вашем сервере
Если вы смогли войти в свою учетную запись, используя SSH без пароля, вы успешно настроили аутентификацию на основе ключа SSH для своей учетной записи. Однако ваш механизм аутентификации на основе пароля по-прежнему активен, а это означает, что ваш сервер по-прежнему подвергается атакам грубой силы.
Прежде чем выполнять действия, описанные в этом разделе, убедитесь, что для учетной записи root на этом сервере настроена аутентификация на основе ключа SSH, или, что предпочтительнее, для учетной записи на этом сервере настроена аутентификация на основе ключа SSH с судо-доступ. Этот шаг заблокирует входы на основе пароля, поэтому очень важно убедиться, что вы по-прежнему сможете получить доступ с правами администратора.
Если вышеуказанные условия выполнены, войдите на удаленный сервер с ключами SSH либо с правами root, либо с учетной записью с привилегиями sudo. Откройте файл конфигурации демона SSH:
Сохраните и закройте файл, когда закончите. Чтобы применить только что внесенные изменения, необходимо перезапустить службу.
В большинстве дистрибутивов Linux для этого можно ввести следующую команду:
Выполнив этот шаг, вы успешно перевели демон SSH, чтобы он отвечал только на ключи SSH.
Заключение
Теперь на вашем сервере должна быть настроена и запущена аутентификация на основе ключей SSH, что позволит вам входить в систему без ввода пароля учетной записи. Отсюда можно отправиться во многих направлениях. Если вы хотите узнать больше о работе с SSH, ознакомьтесь с нашим руководством по основам SSH.
Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!
Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.
Большая часть аутентификации в средах Windows выполняется с помощью пары "имя пользователя-пароль", что хорошо подходит для систем, использующих общий домен. При работе между доменами, например между локальными и облачными системами, он становится уязвимым для вторжений методом грубой силы.
Для сравнения, в средах Linux обычно используются пары открытый и закрытый ключи для аутентификации, которая не требует использования угадываемых паролей. OpenSSH включает инструменты, помогающие в этом, а именно:
- ssh-keygen для создания ключей безопасности
- ssh-agent и ssh-add для безопасного хранения закрытых ключей
- scp и sftp для безопасного копирования файлов открытого ключа при первоначальном использовании сервера
В этом документе представлен обзор того, как использовать эти инструменты в Windows, чтобы начать использовать аутентификацию на основе ключей с SSH. Если вы не знакомы с управлением ключами SSH, мы настоятельно рекомендуем вам ознакомиться с документом NIST IR 7966 под названием «Безопасность интерактивного и автоматизированного управления доступом с использованием Secure Shell (SSH)».
О парах ключей
Пары ключей относятся к файлам открытого и закрытого ключей, которые используются определенными протоколами аутентификации.
Аутентификация с открытым ключом SSH использует асимметричные криптографические алгоритмы для создания двух файлов ключей — одного «частного» и другого «общедоступного».Файлы закрытых ключей являются эквивалентом пароля и должны оставаться защищенными при любых обстоятельствах. Если кто-то получит ваш закрытый ключ, он сможет войти под вашим именем на любой SSH-сервер, к которому у вас есть доступ. Открытый ключ — это то, что размещается на сервере SSH, и им можно делиться без ущерба для закрытого ключа.
При использовании аутентификации по ключу с сервером SSH сервер и клиент SSH сравнивают открытый ключ для имени пользователя, предоставленного с закрытым ключом. Если открытый ключ на стороне сервера не может быть сверен с закрытым ключом на стороне клиента, аутентификация завершается неудачно.
Многофакторная аутентификация может быть реализована с помощью пар ключей путем ввода парольной фразы при создании пары ключей (см. генерацию ключа пользователя ниже). Во время аутентификации у пользователя запрашивается парольная фраза, которая используется вместе с наличием закрытого ключа на клиенте SSH для аутентификации пользователя.
Генерация ключа хоста
К открытым ключам предъявляются особые требования ACL, которые в Windows приравниваются к разрешению доступа только администраторам и системным. При первом использовании sshd будет автоматически сгенерирована пара ключей для хоста.
Сначала необходимо установить сервер OpenSSH. См. раздел Начало работы с OpenSSH.
По умолчанию служба sshd запускается вручную. Чтобы запускать его каждый раз при перезагрузке сервера, выполните следующие команды из командной строки PowerShell с повышенными привилегиями на своем сервере:
Поскольку со службой sshd не связан ни один пользователь, ключи хоста хранятся в папке C:\ProgramData\ssh.
Генерация ключа пользователя
Чтобы использовать аутентификацию на основе ключей, сначала необходимо сгенерировать пары открытого и закрытого ключей для своего клиента. ssh-keygen.exe используется для создания файлов ключей, и могут быть указаны алгоритмы DSA, RSA, ECDSA или Ed25519. Если алгоритм не указан, используется RSA. Следует использовать надежный алгоритм и длину ключа, например Ed25519 в этом примере.
Чтобы сгенерировать файлы ключей с помощью алгоритма Ed25519, запустите в клиенте из командной строки PowerShell или cmd следующую команду:
Это должно отобразить следующее (где «имя пользователя» заменено вашим именем пользователя):
Вы можете нажать Enter, чтобы принять значение по умолчанию, или указать путь и/или имя файла, в котором вы хотите сгенерировать ключи. На этом этапе вам будет предложено использовать парольную фразу для шифрования ваших файлов закрытого ключа. Это может быть пустым, но не рекомендуется. Парольная фраза работает с файлом ключа для обеспечения двухфакторной аутентификации. В этом примере мы оставляем парольную фразу пустой.
Теперь у вас есть пара открытый/закрытый ключ Ed25519 в указанном месте. Файлы .pub — это открытые ключи, а файлы без расширения — закрытые ключи:
Помните, что файлы закрытых ключей являются эквивалентом пароля и должны быть защищены так же, как вы защищаете свой пароль. Чтобы помочь в этом, используйте ssh-agent для безопасного хранения закрытых ключей в контексте безопасности Windows, связанном с вашим входом в Windows. Для этого запустите службу ssh-agent от имени администратора и используйте ssh-add для сохранения закрытого ключа.
После выполнения этих шагов всякий раз, когда для аутентификации от этого клиента требуется закрытый ключ, ssh-agent автоматически извлекает локальный закрытый ключ и передает его вашему SSH-клиенту.
Настоятельно рекомендуется создать резервную копию закрытого ключа в безопасном месте, а затем удалить его из локальной системы, после добавления в ssh-agent. Закрытый ключ не может быть получен от агента, если используется надежный алгоритм, такой как Ed25519 в этом примере. Если вы потеряете доступ к закрытому ключу, вам придется создать новую пару ключей и обновить открытый ключ во всех системах, с которыми вы взаимодействуете.
Развертывание открытого ключа
Чтобы использовать пользовательский ключ, созданный выше, содержимое вашего открытого ключа (~\.ssh\id_ed25519.pub) необходимо поместить на сервер в текстовый файл, имя и расположение которого зависит от того, учетная запись пользователя является членом группы локальных администраторов или стандартной учетной записью пользователя.
Стандартный пользователь
Содержимое вашего открытого ключа (~\.ssh\id_ed25519.pub) необходимо поместить на сервер в текстовый файл с именем author_keys в папке C:\Users\username\.ssh\. Клиент OpenSSH включает scp, утилиту для безопасной передачи файлов, помогающую в этом.
В приведенном ниже примере открытый ключ копируется на сервер (где «имя пользователя» заменяется вашим именем пользователя). Сначала вам нужно будет использовать пароль для учетной записи пользователя на сервере.
Административный пользователь
Содержимое вашего открытого ключа (~\.ssh\id_ed25519.pub) необходимо поместить на сервер в текстовый файл с именем administrators_authorized_keys в C:\ProgramData\ssh\. Клиент OpenSSH включает scp, утилиту для безопасной передачи файлов, помогающую в этом. ACL для этого файла необходимо настроить так, чтобы разрешить доступ только администраторам и системе.
В приведенном ниже примере открытый ключ копируется на сервер и настраивается ACL (где «имя пользователя» заменяется вашим именем пользователя). Сначала вам нужно будет использовать пароль для учетной записи пользователя на сервере.
В этом примере показаны шаги по созданию файлаadmins_authorized_keys. Если он запускается несколько раз, он каждый раз перезаписывает этот файл. Чтобы добавить открытый ключ для нескольких пользователей с правами администратора, вам необходимо добавить в этот файл каждый открытый ключ.
Эти шаги завершают настройку, необходимую для использования проверки подлинности на основе ключей с OpenSSH в Windows. После этого пользователь может подключиться к хосту sshd с любого клиента, у которого есть закрытый ключ.
Читайте также: