Apakah kunci GPG dan SSH dipertukarkan?

70

Saya ingin membuat RSAkunci GPGdan menggunakannya dalam SSHlogin. Apakah ini mungkin? Jika ya, bagaimana caranya?

sunting: lihat jawaban @ wwerner, saya tidak mencobanya tetapi tampaknya menjadi solusi saat ini (pada 2018)

destan
sumber

Jawaban:

26

Saya tahu ini adalah pos lama, tetapi bagi orang-orang seperti saya tersandung pada ini:

Sekarang (karena gpg 2.1) mungkin untuk hanya mengambil kunci ssh langsung menggunakan gpg: gpg --export-ssh-key <key id>!.

The !mark adalah opsional, itu membuat kunci ekspor primer dan menghilangkan memeriksa apakah kuncinya adalah otentikasi-mampu ([CA]).

Detail:

wwerner
sumber
Jawaban ini harus diterima. :)
Inkeliz
30

Saya sedang melakukan penelitian tentang topik ini dan saya dapat memberikan Anda beberapa petunjuk, tetapi saya belum menemukan cara untuk membuatnya bekerja.

Monyet

Monkeysphere tampaknya proyek yang sangat menarik, tetapi saya tidak dapat mengkompilasinya di bawah Mac OS X tanpa menyumbat ruang disk kecil saya dengan MacPorts.

Menggunakan gpgkey2ssh

Cara pertama yang saya sarankan untuk Anda coba adalah membuat entri Authorized_key yang kompatibel dari id kunci Anda (misalnya, BFB2E5E3) dengan

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

Di sini saya menambahkannya ke localhost saya karena saya menjalankan ssh server untuk tujuan pengujian, tetapi tentu saja Anda harus menambahkan ini ke host target ~/.ssh/authorized_keys. Selanjutnya Anda perlu memberi tahu SSH untuk menggunakan bagian pribadi dari kunci ini selama otentikasi, tetapi hanya mengekspor versi ASCII lapis baja dari kunci pas tidak berfungsi:

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

Menggunakan gpg-agent

gpg-agentmemiliki opsi --enable-ssh-supportyang memungkinkan untuk menggunakannya sebagai pengganti drop-in untuk yang terkenal ssh-agent. Saya pernah membaca tentang beberapa orang yang mencoba menambahkan melalui ssh-addkunci GPG mereka setelah meluncurkan gpg-agentdengan cara ini:

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

Tetapi saya tidak berpikir ini akan berhasil. The gpg-agent manualnya mengatakan:

Kunci SSH, yang akan digunakan melalui agen, perlu ditambahkan ke agen gpg pada awalnya melalui utilitas ssh-add. Ketika kunci ditambahkan, ssh-add akan meminta kata sandi file kunci yang disediakan dan mengirimkan materi kunci yang tidak dilindungi ke agen; ini menyebabkan agen gpg meminta frasa sandi, yang akan digunakan untuk mengenkripsi kunci yang baru diterima dan menyimpannya di direktori spesifik agen gpg.

Jadi sepertinya itu gpg-agentharus digunakan sebagai langkah tambahan untuk melindungi kunci SSH Anda dengan enkripsi GPG.

Mengonversi kunci GPG ke OpenSSH

Jérôme Pouiller di blognya menulis bahwa utilitas Gpgsm dapat mengekspor kunci dan sertifikat di PCSC12; mereka kemudian dapat digunakan oleh 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

Tapi saya belum menemukan cara untuk gpgsmmenerima keypairs gpg saya.

Hal lain yang bisa Anda coba

SSH memiliki -Iopsi untuk menentukan perpustakaan bersama PKCS # 11 sshharus digunakan untuk berkomunikasi dengan token PKCS # 11 yang menyediakan kunci RSA pribadi pengguna. ssh-keygendapat menggunakan RFC4716 / SSH2 kunci publik atau pribadi, kunci publik PEM PKCS8, dan kunci publik PEM untuk menghasilkan kunci privat (atau publik) yang kompatibel dengan OpenSSH menggunakan opsi -idan -m.

Tetap saja saya tidak dapat menemukan cara untuk menyatukan semuanya.

Claudio Floreani
sumber
5
Catatan yang gpgkey2sshtelah diganti pada --export-ssh-keyversi 2.1.11 (2016-01-26). Butuh beberapa saat untuk menyadari hal ini. Penggunaan adalah gpg --export-ssh-key BFB2E5E3.
MayeulC
Ada posting yang bagus di Linode tetapi mereka menggunakan gpg-agent untuk mengautentikasi dengan SSH. Mereka tidak mengonversi kunci rahasia gpg ke kunci pribadi SSH.
Xorax
14

Tidak, mereka tidak bisa dipertukarkan. Ya, dimungkinkan untuk menggunakan kunci GPG untuk otentikasi - paket Monkeysphere memiliki alat untuk mengekstrak keypair RSA mentah dari sertifikat GPG Anda.

  1. Sertifikat GPG Anda akan memerlukan subkunci dengan bendera kemampuan "otentikasi". Untuk membuat subkunci seperti itu, jalankan sekali:

    monkeysphere g
    
  2. Sekarang tambahkan subkunci otentikasi Anda ke ssh-agent :

    monkeysphere s
    

Agak relevan: utas gnupg-pengguna ini .

grawity
sumber
9

Dengan informasi dari jawaban atas pertanyaan ini dan bantuan milis gnupg-pengguna, saya dapat mengetahui cara menggunakan kunci GPG saya untuk otentikasi SSH. Seperti yang telah disebutkan oleh Claudio Floreani dalam jawabannya, ada beberapa metode yang mungkin untuk melakukan ini.

Saya telah menulis blogpost tentang beberapa solusi yang mungkin: http://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

Untuk meringkas: Anda menggunakan GnuPG 2.1, yang saat ini dalam versi beta. Saat menggunakan versi ini, Anda cukup memulai gpg-agent dengan opsi --enable-ssh-support dan tambahkan keygrip untuk Anda kunci GPG (atau subkey) ke ~ / .gnupg / sshcontrol.

Ketika Anda menggunakan versi GnuPG stabil saat ini (2.0.x), Anda dapat menggunakan monkeysphere untuk menambahkan kunci Anda ke gpg-agent (sekali lagi, setelah memulai gpg-agent dengan opsi --enable-ssh-support).

Dimungkinkan juga untuk menggunakan keyring GNOME (atau bahkan ssh-agent biasa) dengan bantuan monkeysphere. Satu-satunya masalah dalam hal ini adalah Anda harus menambahkan kembali kunci Anda ketika masuk lagi (ke Gnome atau XFCE). Untuk mengatasi ini, Anda dapat mengekspor kunci secara manual dan mengonversinya.

jeroen
sumber