Czy klucze GPG i SSH są wymienne?

70

Chcę wygenerować RSAklucz GPGi użyć go przy SSHlogowaniu. Czy to w ogóle możliwe? Jeśli tak to jak?

edycja: patrz odpowiedź @ wwerner, nie próbowałem, ale wydaje się, że jest to bieżące rozwiązanie (stan na 2018 r.)

destan
źródło

Odpowiedzi:

26

Wiem, że to stary post, ale dla takich osób jak ja potykają się o to:

Jest obecnie (od gpg 2.1) można łatwo wyodrębnić klucze ssh bezpośrednio za pomocą GPG: gpg --export-ssh-key <key id>!.

!Znak jest opcjonalne, to sprawia, że klucz podstawowy eksportowane i pomija sprawdzanie, czy klucz jest uwierzytelnienie-zdolny ([CA]).

Detale:

wwerner
źródło
Ta odpowiedź powinna być zaakceptowana. :)
Inkeliz
30

Robię badania na ten temat i mogę dać ci kilka wskazówek, ale nie znalazłem jeszcze sposobu, aby to zadziałało.

Monkeysphere

Monkeysphere wydaje się bardzo interesującym projektem, ale nie udało mi się go skompilować pod Mac OS X bez zatykania mojego małego wolnego miejsca na dysku MacPorts.

Korzystanie z gpgkey2ssh

Pierwszym sposobem, który sugeruję, jest próba wygenerowania zgodnego wpisu uprawnionych kluczy na podstawie identyfikatora klucza (np. BFB2E5E3) za pomocą

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

Tutaj dodałem go do lokalnego hosta, ponieważ uruchomiłem serwer ssh w celach testowych, ale oczywiście powinieneś dodać to do hosta docelowego ~/.ssh/authorized_keys. Następnie musisz powiedzieć SSH, aby używał prywatnej części tego klucza podczas uwierzytelniania, ale po prostu eksportowanie zbrojonej wersji pary kluczy ASCII nie działa:

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

Korzystanie z gpg-agent

gpg-agentma opcję, --enable-ssh-supportktóra pozwala mu używać go jako zamiennika dla dobrze znanego ssh-agent. Czytałem o niektórych ludziach, którzy próbują dodać ssh-addswój klucz GPG po uruchomieniu w gpg-agentten sposób:

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

Ale nie sądzę, żeby to kiedykolwiek zadziałało. Strona gpg-agent mówi:

Klucze SSH, które mają być używane za pośrednictwem agenta, należy najpierw dodać do gpg-agent za pomocą narzędzia ssh-add. Po dodaniu klucza ssh-add poprosi o hasło do dostarczonego pliku kluczy i wyśle ​​niezabezpieczony materiał klucza do agenta; powoduje to, że gpg-agent prosi o hasło, które ma być użyte do szyfrowania nowo otrzymanego klucza i przechowywania go w katalogu specyficznym dla gpg-agent.

Wygląda więc na to, że gpg-agentnależy to wykorzystać jako dodatkowy środek do ochrony kluczy SSH za pomocą szyfrowania GPG.

Konwersja klucza GPG na OpenSSH

Jérôme Pouiller na swoim blogu pisze, że narzędzie Gpgsm może eksportować klucze i certyfikaty w PCSC12; mogą być następnie używane przez 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

Ale nie znalazłem sposobu, aby gpgsmzaakceptować moje pary kluczy gpg.

Inne rzeczy, których możesz spróbować

SSH ma -Iopcję określenia biblioteki współużytkowanej PKCS # 11, która sshpowinna być używana do komunikacji z tokenem PKCS # 11 zapewniającym prywatny klucz RSA użytkownika. ssh-keygenmoże używać klucza publicznego lub prywatnego RFC4716 / SSH2, kluczy publicznych PEM PKCS8 i kluczy publicznych PEM do generowania klucza prywatnego (lub publicznego) zgodnego z OpenSSH przy użyciu opcji -ii -m.

Nadal nie mogę znaleźć sposobu, aby to wszystko połączyć.

Claudio Floreani
źródło
5
Uwaga: gpgkey2sshzostał zastąpiony --export-ssh-keywersją 2.1.11 (26.01.2016). Zajęło mi to trochę czasu, aby to zrozumieć. Wykorzystanie jest gpg --export-ssh-key BFB2E5E3.
MayeulC
Jest dobry post na Linode, ale użyli agenta gpg do uwierzytelnienia w SSH. Nie konwertują tajnego klucza gpg na klucz prywatny SSH.
Xorax,
14

Nie, nie są wymienne. Tak, do uwierzytelnienia można użyć kluczy GPG - pakiet Monkeysphere zawiera narzędzia do wyodrębnienia surowej pary kluczy RSA z certyfikatu GPG.

  1. Twój certyfikat GPG będzie potrzebował podklucza z flagą możliwości „uwierzytelniania”. Aby utworzyć taki podklucz, uruchom raz:

    monkeysphere g
    
  2. Teraz dodaj swoje podklucze uwierzytelniania do ssh-agent :

    monkeysphere s
    

Nieco istotne: ten wątek użytkowników gnupg .

grawitacja
źródło
9

Dzięki informacjom zawartym w odpowiedziach na to pytanie oraz przy pomocy listy mailingowej gnupg-users mogłem dowiedzieć się, jak używać mojego klucza GPG do uwierzytelniania SSH. Jak już wspomniał Claudio Floreani w swojej odpowiedzi, istnieje kilka możliwych metod, aby to zrobić.

Napisałem blog na temat niektórych możliwych rozwiązań: http://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

Podsumowując: Albo używasz GnuPG 2.1, który jest obecnie w fazie beta. Korzystając z tej wersji, możesz po prostu uruchomić gpg-agent z opcją --enable-ssh-support i dodać klucz dla twojego klucza GPG (lub podklucza) do ~ / .gnupg / sshcontrol.

Kiedy używasz bieżącej stabilnej wersji GnuPG (2.0.x), możesz użyć monkeysphere, aby dodać swój klucz do gpg-agent (ponownie, po uruchomieniu gpg-agent z opcją --enable-ssh-support).

Możliwe jest również użycie kluczy GNOME (lub nawet zwykłego agenta ssh) za pomocą monkeysphere. Jedynym problemem w tym przypadku jest to, że będziesz musiał ponownie dodać swój klucz przy ponownym logowaniu (do Gnome lub XFCE). Aby rozwiązać ten problem, możesz ręcznie wyeksportować swój klucz i przekonwertować go.

jeroen
źródło