Các khóa GPG và SSH có thể hoán đổi cho nhau không?


70

Tôi muốn tạo một RSAkhóa trong GPGvà sử dụng nó trong SSHđăng nhập. Điều này thậm chí có thể? Nếu vậy thì thế nào?

chỉnh sửa: xem câu trả lời của @ wwerner, tôi đã không thử nhưng dường như đó là giải pháp hiện tại (tính đến năm 2018)

Câu trả lời:


26

Tôi biết đây là một bài viết cũ, nhưng đối với những người như tôi vấp phải điều này:

Bây giờ (kể từ gpg 2.1) có thể chỉ cần trích xuất các khóa ssh trực tiếp bằng gpg : gpg --export-ssh-key <key id>!.

Các !dấu ấn là không bắt buộc, nó làm cho các khóa chính có thể xuất khẩu và bỏ qua kiểm tra xem chính là xác thực có khả năng ([CA]).

Chi tiết:


Câu trả lời này nên được chấp nhận. :)
Inkeliz

30

Tôi đang thực hiện một số nghiên cứu về chủ đề này và tôi có thể cung cấp cho bạn một số gợi ý, nhưng tôi chưa tìm được cách nào để nó hoạt động.

Khỉ

Monkeysphere có vẻ là một dự án rất thú vị, nhưng tôi đã không thể biên dịch nó trong Mac OS X mà không làm tắc nghẽn không gian đĩa trống nhỏ của tôi với MacPorts.

Sử dụng gpgkey2ssh

Cách đầu tiên tôi khuyên bạn nên thử là tạo một mục ủy quyền tương thích từ id khóa của bạn (ví dụ: BFB2E5E3) với

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

Ở đây tôi đã thêm nó vào localhost của mình vì tôi đã chạy một máy chủ ssh cho mục đích thử nghiệm, nhưng tất nhiên bạn nên thêm nó vào máy chủ đích ~/.ssh/authorized_keys. Tiếp theo, bạn cần yêu cầu SSH sử dụng phần riêng tư của khóa này trong khi xác thực, nhưng chỉ cần xuất phiên bản bọc thép ASCII của cặp khóa không hoạt động:

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

Sử dụng tác nhân gpg

gpg-agentcó tùy chọn --enable-ssh-supportcho phép nó sử dụng nó như một sự thay thế thả vào cho người nổi tiếng ssh-agent. Tôi đã đọc được một số người đang cố gắng thêm thông qua ssh-addkhóa GPG của họ sau khi khởi chạy gpg-agenttheo cách này:

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

Nhưng tôi không nghĩ rằng điều này sẽ làm việc. Trang web của đại lý gpg nói:

Khóa SSH, được sử dụng thông qua tác nhân, cần được thêm vào tác nhân gpg ban đầu thông qua tiện ích ssh-add. Khi một khóa được thêm vào, ssh-add sẽ hỏi mật khẩu của tệp khóa được cung cấp và gửi tài liệu khóa không được bảo vệ cho tác nhân; điều này làm cho tác nhân gpg yêu cầu một cụm mật khẩu, được sử dụng để mã hóa khóa mới nhận và lưu trữ nó trong một thư mục cụ thể của tác nhân gpg.

Vì vậy, có vẻ như gpg-agentnên được sử dụng như một biện pháp bổ sung để bảo vệ các khóa SSH của bạn bằng mã hóa GPG.

Chuyển đổi khóa GPG sang OpenSSH

Jérôme Pouiller trong blog của mình viết rằng tiện ích Gpgsm có thể xuất các khóa và chứng chỉ trong PCSC12; sau đó chúng có thể được OpenSSH sử dụng:

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

Nhưng tôi chưa tìm được cách nào để gpgsmchấp nhận bàn phím gpg của mình.

Những thứ khác bạn có thể thử

SSH có một -Itùy chọn để chỉ định thư viện chia sẻ PKCS # 11 sshnên sử dụng để liên lạc với mã thông báo PKCS # 11 cung cấp khóa RSA riêng của người dùng. ssh-keygencó thể sử dụng khóa chung hoặc khóa riêng RFC4716 / SSH2, khóa chung PEM PKCS8 và khóa chung PEM để tạo khóa riêng (hoặc chung) tương thích OpenSSH bằng cách sử dụng -i-mtùy chọn.

Tuy nhiên, tôi không thể tìm ra cách để kết hợp tất cả lại.


5
Lưu ý rằng gpgkey2sshđã được thay thế bởi --export-ssh-keyphiên bản 2.1.11 (2016-01-26). Phải mất một thời gian tôi mới nhận ra điều này. Cách sử dụng là gpg --export-ssh-key BFB2E5E3.
MayeulC


Có một bài viết hay trên Linode nhưng họ đã sử dụng gpg-agent để xác thực bằng SSH. Họ không chuyển đổi khóa bí mật gpg thành khóa riêng SSH.
Xorax

14

Không, chúng không thể thay thế cho nhau. Có, có thể sử dụng các khóa GPG để xác thực - gói Monkeysphere có các công cụ để trích xuất khóa RSA thô từ chứng chỉ GPG của bạn.

  1. Chứng chỉ GPG của bạn sẽ cần một khóa con với cờ khả năng "xác thực". Để tạo một khóa con như vậy, hãy chạy một lần:

    monkeysphere g
    
  2. Bây giờ thêm khóa con xác thực của bạn vào ssh-agent :

    monkeysphere s
    

Hơi liên quan: chủ đề người dùng gnupg này .


9

Với thông tin từ các câu trả lời cho câu hỏi này và sự giúp đỡ của danh sách gửi thư của người dùng gnupg, tôi có thể tìm ra cách sử dụng khóa GPG của mình để xác thực SSH. Như đã được đề cập bởi Claudio Floreani trong câu trả lời của mình, có một vài phương pháp khả thi để làm điều này.

Tôi đã viết một bài đăng trên blog về một số giải pháp có thể: http://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

Để tóm tắt: Hoặc bạn sử dụng GnuPG 2.1, hiện đang trong giai đoạn thử nghiệm. Khi sử dụng phiên bản này, bạn chỉ cần khởi động gpg-agent với tùy chọn --enable-ssh-support và thêm keygrip cho khóa GPG (hoặc khóa con) của bạn vào ~ / .gnupg / sshcontrol.

Khi bạn đang sử dụng phiên bản GnuPG ổn định hiện tại (2.0.x), bạn có thể sử dụng monkeysphere để thêm khóa của mình vào gpg-agent (một lần nữa, sau khi bắt đầu gpg-agent với tùy chọn --enable-ssh-support).

Cũng có thể sử dụng khóa Gnome (hoặc thậm chí là tác nhân ssh thông thường) với sự trợ giúp của khỉ. Vấn đề duy nhất trong trường hợp này là bạn sẽ phải thêm lại khóa của mình khi đăng nhập lại (vào Gnome hoặc XFCE). Để giải quyết điều này, bạn có thể tự xuất khóa của mình và chuyển đổi nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.