Tôi đã mất quyền truy cập vào ~/.ssh/id_dsa
tệ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-agent
và 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-agent
ngay 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-agent
cô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:
- Bắt đầu
gpg-connect-agent
với--hex
tùy chọn. - Trong
>
lời nhắc, hãy lấy ID hex của khóa bằng cách sử dụngkeyinfo --ssh-list
lệnh (chính xác là trường thứ ba cung cấp ID hex của khóa). - Trong
>
dấu nhắc, thực hiệnkeywrap_key --export
. - Trong
>
dấu nhắc, thực hiệnexport_key <enter hex ID from step 2>
hoặcexport_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-agent
cô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!).