Dấu vân tay của khóa PEM ssh


30

Tôi có một tệp PEM mà tôi thêm vào một ssh-agent đang chạy:

$ file query.pem
query.pem: PEM RSA private key

$ ssh-add ./query.pem
Identity added: ./query.pem (./query.pem)

$ ssh-add -l | grep query
2048 ef:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ./query.pem (RSA)

Làm cách nào tôi có thể lấy dấu vân tay của khóa (mà tôi thấy trong ssh-agent) trực tiếp từ tệp? Tôi biết ssh-keygen -l -f some_keyhoạt động cho các khóa ssh "bình thường", nhưng không phải cho các tệp PEM.

Nếu tôi thử ssh-keygen trên tệp .pem, tôi nhận được:

$ ssh-keygen -l -f ./query.pem                                             
key_read: uudecode PRIVATE KEY----- failed
key_read: uudecode PRIVATE KEY----- failed
./query.pem is not a public key file.

Phím này bắt đầu bằng:

-----BEGIN RSA PRIVATE KEY-----
MIIEp.... etc.

trái ngược với khóa riêng "thông thường", trông giống như:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E15F2.... etc.

Tại sao bạn nghĩ rằng nó không hoạt động cho các tệp PEM? Bạn gặp lỗi gì khi thử nó? Một .ssh/id_rsatệp được tạo bởi OpenSSH bằng cách sử dụng tất cả các giá trị mặc định là tệp PEM. Các khóa riêng được mã hóa PEM theo mặc định. Trong thực tế, bạn có thể sử dụng các khóa RSA mà bạn tạo bằng OpenSSL trực tiếp với OpenSSH.
Zoredache

mô tả được cập nhật với đầu ra từ ssh-keygen trên .pem
Không rõ

(muộn nhưng bị hoại tử) @Zoredache: Trước 7.2 (năm 2016, sau Q này) ssh-keygen -lkhông thể đọc tệp tin riêng tư, mặc dù các thao tác ssh-keygen(và ssh*) khác thực hiện. Nhưng khi ssh-keygen tạo khóa, nó ghi cả tệp tin privatekey, ví dụ id_rsa tệp công khai tương ứng có .pubthêm ví dụ id_rsa.pub. Cũ hơn ssh-keygen -l sẽ thử thêm .pubvào tên tệp bạn chỉ định và đọc tệp công khai đó.
dave_thndry_085

Câu trả lời:


34

Nếu bạn muốn lấy lại dấu vân tay của tệp khóa công khai bị mất, bạn có thể khôi phục nó từ tệp khóa riêng :

$ ssh-keygen -yf path/to/private_key_file > path/to/store/public_key_file

Sau đó, bạn có thể xác định dấu vân tay công khai:

$ ssh-keygen -lf path/to/store/public_key_file
2048 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@host (RSA)

Trên một số hệ thống mới hơn, bản này in dấu vân tay SHA256 của phím. Bạn có thể in dấu vân tay MD5 của phím (dạng dấu hai chấm) bằng tùy chọn -E:

$ ssh-keygen -E md5 -lf path/to/store/public_key_file
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

Hoặc như một dòng lệnh :

$ ssh-keygen -yf /etc/ssh/ssh_host_ecdsa_key | ssh-keygen -E md5 -lf -
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

Câu trả lời của @ MikeD thực sự là câu trả lời "chính xác" cho những gì OP đang tìm kiếm (và những gì tôi đang tìm kiếm). AWS cung cấp dấu vân tay ở định dạng mà anh ấy đã hiển thị, với các cặp chữ số được phân tách bằng dấu hai chấm. Giải pháp của anh ấy (được lấy từ trang AWS được cung cấp) cũng tạo ra dấu vân tay theo cách tương tự, để bạn có thể xác minh chính xác.
Mike Williamson

50

" Xác minh dấu vân tay của cặp khóa " của AWS cung cấp hai lớp lót để giải quyết vấn đề, tùy thuộc vào cách khóa của bạn được tạo.

Nếu bạn đã tạo cặp khóa của mình bằng AWS:

$ openssl pkcs8 -in query.pem -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

Hoặc, nếu bạn đã tạo cặp khóa của mình bằng công cụ của bên thứ ba:

$ openssl rsa -in query.pem -pubout -outform DER | openssl md5 -c
writing RSA key
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

(dấu vân tay được điều chỉnh lại ở đầu ra ở trên)


6

Đây là một lớp lót nên làm những gì bạn muốn mà không yêu cầu tạo tệp khóa công khai cục bộ.

$ ssh-keygen -lf /dev/stdin <<< $( ssh-keygen -f ~/.ssh/keyname.pem -y )
2048 14:df:c7:b7:f1:26:7f:87:d5:e7:10:6c:ac:af:a2:03 /dev/stdin (RSA)

Điều này sử dụng chuỗi bash ở đây <<<để có sẵn stdin dưới dạng một tệp thông thường ( /dev/stdin) chứ không phải là một đường ống như ssh-keygensẽ chỉ hoạt động trên một tệp.

Kể từ phiên bản 7.2 của openssh ssh-keygen hỗ trợ lấy dấu vân tay từ đầu vào tiêu chuẩn:

  • ssh-keygen (1): cho phép lấy dấu vân tay từ đầu vào tiêu chuẩn, ví dụ: "ssh-keygen -lf -"

Lưu ý rằng lệnh này sẽ ngắt với các khóa riêng sử dụng cụm mật khẩu và không sử dụng tác nhân. Nó nên hoạt động với các tệp pem được tạo bởi AWS hoặc OpenStack không sử dụng cụm mật khẩu.

Xem https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin để biết thêm thông tin.


Các ghi chú phát hành đã không nói nhưng theo các nguồn như của 7.2 -lcũng hỗ trợ đọc một privatekey tập tin (nhưng không từ stdin).
dave_thndry_085

2

Bạn không lấy dấu vân tay từ tệp khóa riêng mà từ tệp khóa chung.

Trong thực tế, ssh-keygen đã nói với bạn điều này:

./query.pem không phải là tệp khóa công khai.

Chạy nó với một nửa khóa công khai và nó sẽ hoạt động.

Nói chung hơn

Hãy suy nghĩ về nó: lý do cho dấu vân tay tồn tại là bạn có thể xác định khóa chung. Trong thực tế, nhận được một hàm băm của khóa riêng là một vấn đề bảo mật tiềm ẩn bên cạnh việc vô dụng đối với máy chủ (thậm chí không có khóa riêng trong câu hỏi).

Khi bạn có khóa chung, quy trình là xác minh rằng máy khách có một nửa riêng tư tương ứng. Vì bạn đã biết những phím nào bạn đang cố xác minh, bạn không cần lấy dấu vân tay.


Vấn đề là tôi không có khóa công khai cho khóa riêng này :( Và một điều nữa, ssh-keygenhoạt động trên tệp khóa riêng RSA có thông tin bổ sung khi bắt đầu (xem bài đăng đầu tiên của tôi), nhưng không phải trên khóa này. .
Không rõ

Sau đó, không có gì bạn có thể làm về nó. Bạn không thể lấy một nửa khóa công khai từ phần riêng tư nhiều hơn bạn có thể làm ngược lại.
Stephane

3
Điều đó không chính xác. Như @ominug đã chỉ ra ở trên, ssh-keygen -yfthực hiện điều này.
Steve Bennett

4
@Stephane Mặc dù đúng ở cấp độ RSA thuần túy, trong thực tế, cách các khóa được lưu trữ trong PKCS chỉ định định dạng cho các khóa riêng thực sự bao gồm cả hai khóa. So sánh thông số kỹ thuật cho riêng tưcông khai
Håkan Lindqvist

"Bạn không thể lấy một nửa khóa công khai từ phần riêng tư ..." - ồ, có lẽ bạn có thể. Lấy mô-đun từ khóa riêng và sử dụng 65537 làm số mũ công khai và rất có thể, bạn đã tìm thấy khóa chung.
Jim Flood
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.