Являются ли ключи GPG и SSH взаимозаменяемыми?

70

Я хочу создать RSAключ GPGи использовать его при SSHвходе в систему. Это вообще возможно? Если так, то как?

изменить: см. ответ @ wwerner, я не пробовал, но, похоже, это текущее решение (по состоянию на 2018 г.)

дестан
источник

Ответы:

26

Я знаю, что это старый пост, но для таких как я спотыкаюсь:

Сейчас (с GPG 2.1) можно просто извлечь ключи SSH непосредственно с помощью GPG: gpg --export-ssh-key <key id>!.

!Знак не является обязательным, это делает первичный ключ экспортируемым и опускает проверки , является ли ключ аутентификации с поддержкой ([СА]).

Подробности:

wwerner
источник
Этот ответ должен быть принятым. :)
Inkeliz
30

Я провожу некоторые исследования по этой теме и могу дать вам несколько советов, но я пока не нашел способа заставить это работать.

Monkeysphere

Monkeysphere кажется очень интересным проектом, но я не смог скомпилировать его под Mac OS X без засорения моего небольшого свободного дискового пространства с помощью MacPorts.

Использование gpgkey2ssh

Первый способ, который я предлагаю вам попробовать, - это создать совместимую запись authorized_keys из вашего идентификатора ключа (например, BFB2E5E3) с

gpgkey2ssh BFB2E5E3 | tee -a ~/.ssh/authorized_keys

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

gpg --armor --export-secret-key BFB2E5E3! |tee ~/.ssh/id_rsa
gpg --armor --export BFB2E5E3! | tee ~/.ssh/id_rsa.pub
chmod 400 ~/.ssh/id_rsa
ssh localhost

Использование gpg-agent

gpg-agentимеет опцию, --enable-ssh-supportкоторая позволяет использовать его в качестве замены для известных ssh-agent. Я читал о некоторых людях, пытающихся добавить ssh-addих ключ GPG после запуска gpg-agentтаким образом:

gpg-agent --enable-ssh-support --daemon
gpg --armor --export-secret-key BFB2E5E3! | tee ~/.gnupg/exported-keys/BFB2E5E3_sec.asc
ssh-add ~/.gnupg/exported-keys/BFB2E5E3_sec.asc

Но я не думаю, что это когда-нибудь сработает. На странице руководства gpg-agent написано:

Ключи SSH, которые должны использоваться через агента, должны быть сначала добавлены в gpg-agent с помощью утилиты ssh-add. Когда ключ добавлен, ssh-add запросит пароль предоставленного файла ключа и отправит агенту незащищенный материал ключа; это заставляет gpg-agent запрашивать фразу-пароль, которая должна использоваться для шифрования вновь полученного ключа и сохранения его в специальном каталоге gpg-agent.

Так что, похоже, это gpg-agentследует использовать в качестве дополнительной меры для защиты ваших ключей SSH с помощью шифрования GPG.

Преобразование ключа GPG в OpenSSH

Жером Пуйлер в своем блоге пишет, что утилита Gpgsm может экспортировать ключи и сертификаты в PCSC12; затем они могут быть использованы OpenSSH:

gpgsm -o secret-gpg-key.p12 --export-secret-key-p12 0xXXXXXXXX
openssl pkcs12 -in secret-gpg-key.p12 -nocerts -out gpg-key.pem
chmod 600 gpg-key.pem
cp gpg-key.pem ~/.ssh/id_rsa
ssh-keygen -y -f gpg-key.pem > ~/.ssh/id_rsa.pub

Но я не нашел способ заставить gpgsmпринять мои пары ключей gpg.

Другие вещи, которые вы можете попробовать

SSH имеет -Iвозможность указать общую библиотеку PKCS # 11, которую sshследует использовать для связи с токеном PKCS # 11, предоставляющим личный ключ RSA пользователя. ssh-keygenможет использовать открытый или закрытый ключ RFC4716 / SSH2, открытые ключи PEM PKCS8 и открытые ключи PEM для генерации открытого (или открытого) ключа, совместимого с OpenSSH, с использованием параметров -iи -m.

Тем не менее я не могу найти способ собрать все это вместе.

Клаудио Флореани
источник
5
Обратите внимание, что gpgkey2sshбыло заменено на --export-ssh-keyверсии 2.1.11 (2016-01-26). Мне понадобилось время, чтобы понять это. Использование есть gpg --export-ssh-key BFB2E5E3.
MayeulC
1
gpgkey2ssh исчез, --export-ssh-key здесь.
Властимил Овчачик
Есть хорошая публикация о Linode, но они использовали gpg-agent для аутентификации по SSH. Они не конвертируют секретный ключ gpg в закрытый ключ SSH.
Ксоракс
14

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

  1. Вашему сертификату GPG понадобится подраздел с флагом возможности «аутентификации». Чтобы создать такой подраздел, выполните один раз:

    monkeysphere g
    
  2. Теперь добавьте ваши подразделы аутентификации в ssh-agent :

    monkeysphere s
    

Несколько актуально: это ветка gnupg-users .

grawity
источник
9

Получив информацию из ответов на этот вопрос и с помощью списка рассылки gnupg-users, я смог выяснить, как использовать мой ключ GPG для аутентификации SSH. Как уже упоминал Клаудио Флориани в своем ответе, есть несколько возможных способов сделать это.

Я написал пост в блоге о некоторых возможных решениях: http://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

Подводя итог: либо вы используете GnuPG 2.1, которая в настоящее время находится в бета-версии. При использовании этой версии вы можете просто запустить gpg-agent с опцией --enable-ssh-support и добавить ключевую рукоятку для вашего ключа GPG (или подключа) в ~ / .gnupg / sshcontrol.

Когда вы используете текущую стабильную версию GnuPG (2.0.x), вы можете использовать monkeysphere, чтобы добавить свой ключ в gpg-agent (опять же, после запуска gpg-agent с опцией --enable-ssh-support).

Также возможно использовать набор ключей GNOME (или даже обычный ssh-агент) с помощью monkeysphere. Единственная проблема в этом случае заключается в том, что вам придется повторно добавлять ключ при повторном входе в систему (в Gnome или XFCE). Чтобы решить эту проблему, вы можете вручную экспортировать ваш ключ и конвертировать его.

Йерун
источник