Sử dụng công cụ kết nối gpg-tác nhân kết nối lại tệp khóa riêng ssh


8

Tôi đã mất quyền truy cập vào ~/.ssh/id_dsatệp của mình (tệp khóa riêng OpenSSH trong thuật toán DSA), do quên cụm mật khẩu.

Nhưng, ban đầu, tôi đã nhập nó vào gpg-agentvà bảo vệ nó bằng cụm mật khẩu gpg-agent, mà tôi biết. Và khóa riêng vẫn hoạt động tốt gpg-agentngay cả bây giờ, mặc dù bây giờ tôi muốn xây dựng lại tệp khóa riêng OpenSSH bằng cách sử dụng những gì được lưu trữ trong gpg-agent.

Sử dụng gpg-connect-agentcông cụ, với chuỗi lệnh sau, tôi nghĩ có thể trích xuất khóa riêng (ở định dạng hex / ascii), mặc dù tôi không biết cách tái cấu trúc nó thành định dạng tệp khóa riêng OpenSSH ban đầu:

  1. Bắt đầu gpg-connect-agentvới --hextùy chọn.
  2. Trong >lời nhắc, hãy lấy ID hex của khóa bằng cách sử dụng keyinfo --ssh-listlệnh (chính xác là trường thứ ba cung cấp ID hex của khóa).
  3. Trong >dấu nhắc, thực hiện keywrap_key --export.
  4. Trong >dấu nhắc, thực hiện export_key <enter hex ID from step 2>hoặc export_key --openpgp <enter hex ID from step 2>.

Bây giờ, sau khi nhắc cụm mật khẩu, nhận và xác nhận nó, gpg-connect-agentcông cụ hiển thị vài chục dòng mã hex & ascii, mà tôi rất nghi ngờ là khóa riêng ssh nhập khẩu ban đầu của tôi.

Sau đó, nó hiển thị OK, chắc chắn ngụ ý hoạt động đã thành công.

Giả sử những gì nó hiển thị thực sự là khóa riêng ssh của tôi (theo "trợ giúp export_key", thứ được đổ trên màn hình là phiên bản được mã hóa của aeswrap-128, rất có thể được mã hóa bằng cụm mật khẩu gpg-agent đã biết của tôi), một số trợ giúp về cách để chuyển đổi thông tin đó sang định dạng khóa riêng ssh truyền thống sẽ được đánh giá cao (chương trình perl / python / shell / C để làm điều đó sẽ là một phần thưởng!).

Câu trả lời:


1

Hy vọng sẽ giúp, nhưng tôi hơi lạc đề, vì tôi vấp phải câu hỏi này trong khi có một vấn đề không liên quan. Trong quá trình nâng cấp gpg 2.1.6-> 2.1.10, tôi đã gặp phải sự cố phân tích khóa riêng của Ed25519: https://bugs.gnupg.org/gnupg/su2096 . Kịch bản tôi đã viết gãi ngứa của riêng tôi, nó có thể đổ khóa biểu thức S không được bảo vệ mà tôi có thể hexedit và mã hóa lại.

Vì vậy, liên quan đến câu hỏi này, tôi đã viết một tập lệnh Python ( https://gist.github.com/zougloub/3058d56857ba400b7ec3 ) sử dụng tác nhân gpg để trích xuất khóa riêng của SSH biểu thức S không được bảo vệ, bằng cách lấy khóa keywrap thoát được bảo vệ , khóa được mã hóa và giải mã nó (sử dụng libgcrypt). Nó không hoàn toàn trả lời câu hỏi của bạn, vì nó không kết xuất dữ liệu ở định dạng SSH.

Hy vọng rằng bạn có thể có được điều đó hơn nữa, vì dữ liệu ít nhất là ở trạng thái có thể phân tích cú pháp bây giờ.

Con trỏ khác:

Tôi tò mò muốn xem liệu tôi có thể thực hiện thêm một dặm không, nhưng tôi đã mất quá nhiều thời gian để nhìn xung quanh ... ai đó sẽ vừa mới tạo lại một khóa SSH: D

Trân trọng,

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.