Tính toán dấu vân tay RSA


903

Tôi cần thực hiện kiểm tra khóa SSH cho GitHub, nhưng tôi không chắc làm thế nào để tìm dấu vân tay khóa RSA của mình. Ban đầu tôi đã làm theo hướng dẫn để tạo khóa SSH trên Linux.

Lệnh tôi cần nhập để tìm dấu vân tay khóa RSA hiện tại của mình là gì?


21
FWIW, tôi tiếp tục quay lại bài đăng này github là nơi tôi thấy dấu vân tay trên các phím và tôi muốn chắc chắn rằng mình đang sử dụng khóa riêng tương ứng. có thể nó không đảm bảo một thẻ github từ bài này giúp cho cuộc điều tra liên quan đến github?
hamx0r

4
@ hamx0r Tôi đã quay lại bài đăng này vì Gitlab cũng sử dụng những dấu vân tay đó ...
Ray Foss

1
Tôi đến với nó vì Travis, cũng sử dụng nó. : D
Per Lundberg

4
Đối với tất cả những người sử dụng Linux "tiếp tục quay lại trang này", hãy sao chép trang này vào bashrc của bạn: function fingerprint() { ssh-keygen -lf $1 -E md5 }Sau đó (sau khi bạn lấy bashrc), bạn có thể lấy dấu vân tay vớifingerprint ~/.ssh/key_file
Jeff Diederiks

1
Đối với những người đang thử chức năng @JeffDiederiks và tự hỏi tại sao nó không hoạt động, các hàm Bash cần có dấu vết ;trong cơ thể, vì vậy hãy sử dụng function fingerprint() { ssh-keygen -lf $1 -E md5; }thay thế.
tjjfvi

Câu trả lời:


1261

Chạy lệnh sau để lấy dấu vân tay SHA256 của khóa SSH của bạn ( -lcó nghĩa là "danh sách" thay vì tạo khóa mới, -fcó nghĩa là "tên tệp"):

$ ssh-keygen -lf /path/to/ssh/key

Vì vậy, ví dụ, trên máy của tôi, lệnh tôi đã chạy là (sử dụng khóa chung RSA):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

Để có được định dạng vân tay GitHub (MD5) với các phiên bản mới hơn của ssh-keygen, hãy chạy:

$ ssh-keygen -E md5 -lf <fileName>

Thông tin tiền thưởng:

ssh-keygen -lfcũng hoạt động trên known_hostsauthorized_keyscác tập tin.

Để tìm hầu hết các khóa công khai trên các hệ thống Linux / Unix / OS X, hãy chạy

$ find /etc/ssh /home/*/.ssh /Users/*/.ssh -name '*.pub' -o -name 'authorized_keys' -o -name 'known_hosts'

(Nếu bạn muốn xem bên trong homedirs của người dùng khác, bạn sẽ phải root hoặc sudo.)

Điều ssh-add -lnày rất giống nhau, nhưng liệt kê dấu vân tay của các phím được thêm vào đại lý của bạn. (Người dùng OS X lưu ý rằng SSH không mật khẩu ma thuật thông qua Keychain không giống như sử dụng ssh-agent.)


5
Làm thế nào để tôi tìm thấy con đường là gì?
pal4life

4
Vì dấu vân tay hex của bạn là 32 chữ số, tôi tin rằng đó sẽ là dấu vân tay MD5, đúng không? Trái ngược với dấu vân tay 40 chữ số, sẽ chỉ ra SHA1
kết hợp

8
Trên các hệ thống không phải Ubuntu, tệp có liên quan có thể nằm trong / etc / ssh, ví dụ /etc/ssh/ssh_host_rsa_key.pub
Zorawar

12
Đáng lưu ý rằng dấu vân tay phải giống nhau cho cả hai khóa trong trường hợp khóa công khai / riêng tư; vì vậy dấu vân tay .ssh/id_rsaphải giống như dấu vân tay .ssh/id_rsa.pub. Vì vậy, bạn có thể sử dụng một trong hai (và, nếu bạn giống tôi và yêu thích việc hoàn thành tab, nó sẽ khiến công việc mất ít hơn 2 lần nhấn phím. Hiệu quả!).
Bắn Parthian

25
sử dụng ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pubnếu bạn không muốn đầu ra sha256 tiêu chuẩn
user8162

676

Các lệnh SSH mới hơn sẽ liệt kê dấu vân tay dưới dạng Khóa SHA256 .

Ví dụ:

ssh-keygen -lf ~/.ssh/id_dsa.pub 
1024 SHA256:19n6fkdz0qqmowiBy6XEaA87EuG/jgWUr44ZSBhJl6Y (DSA)

Nếu bạn cần so sánh nó với dấu vân tay cũ, bạn cũng cần chỉ định sử dụng chức năng băm dấu vân tay MD5 .

ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub
2048 MD5:4d:5b:97:19:8c:fe:06:f0:29:e7:f5:96:77:cb:3c:71 (DSA)

Cũng có sẵn: -E sha1

Cập nhật ... CÓ ... có ... Tôi biết ... không nên sử dụng các khóa DSA cho SSH, thay vào đó, nên sử dụng khóa RSA cũ hơn hoặc các khóa chiết trung mới hơn.

Để những 'quản trị viên' tiếp tục chỉnh sửa lệnh tôi đã sử dụng ở trên. DỪNG THAY ĐỔI NÓ! Bạn thực hiện lệnh và kết quả đầu ra khớp sai!


6
Điều đáng nói ở đây là bạn có thể nói sshđể cho bạn thấy dấu vân tay MD5 cũ của máy chủ bằng cách sử dụng ssh -o FingerprintHash=md5 example.org, như được đề cập trong câu trả lời này . (Tôi chỉ đang tìm kiếm điều đó, và câu trả lời này đã đưa tôi đến câu hỏi đó, vì vậy tôi cho rằng những người khác có thể có trải nghiệm tương tự.)
Jonathan Y.

25
Câu trả lời này hữu ích nhất cho những người muốn so sánh các khóa của họ với những gì github.com hiển thị (ví dụ MD5 được định dạng ở dạng hex)
hamx0r

2
Cũng rất hữu ích cho những gì so sánh với những gì putty sẽ báo cáo.
pjcard ngày

27

Để xem khóa của bạn trên Ubuntu, chỉ cần nhập lệnh sau trên thiết bị đầu cuối của bạn:

ssh-add -l

Bạn sẽ nhận được một đầu ra như thế này: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName @ ubfox (RSA)

Tuy nhiên, nếu bạn nhận được một lỗi như; Could not open a connection to your authentication agent.
Sau đó, nó có nghĩa là ssh-agent không chạy. Bạn có thể bắt đầu / chạy nó với: ssh-agent bash(cảm ơn @Richard trong các bình luận) và sau đó chạy lạissh-add -l


5
Nếu bạn không sử dụng Ubuntu, bạn có thể không may gặp phải điều này "Không thể mở kết nối đến tác nhân xác thực của bạn."
rogerdpack

1
Điều này chỉ hoạt động nếu bạn có tác nhân xác thực đang chạy.
Rufflewind

Để có được tác nhân xác thực đang chạy, bạn có thể sử dụng ssh-agent bashvà tiếp tục cuộc sống. Trong cuộc sống như mọi khi; ssh-agentkhông được đảm bảo là một triển khai nhất quán trên tất cả các hệ thống.
Richard Kenneth Niescior 10/03/2016

Một mẹo khác cho linux; Tùy chọn -F (kết xuất dấu vân tay) của ssh-keygen-g3 sẽ hiển thị dấu vân tay của khóa: $ ssh-keygen-g3 -F /path/to/keyfile.pub answer.ssh.com/questions/494/ Thẻ
AnneTheAgile

18

Một cặp khóa (khóa riêng và khóa chung) sẽ có cùng dấu vân tay; Vì vậy, trong trường hợp bạn không thể nhớ khóa riêng nào thuộc về khóa chung nào, hãy tìm kết quả khớp bằng cách so sánh dấu vân tay của chúng.

Câu trả lời được bình chọn nhiều nhất bởi Marvin Vinto cung cấp dấu vân tay của tệp khóa SSH công khai . Dấu vân tay của khóa SSH riêng tương ứng cũng có thể được truy vấn, nhưng nó yêu cầu một chuỗi bước dài hơn, như được hiển thị bên dưới.

  1. Tải tác nhân SSH, nếu bạn chưa làm như vậy. Cách dễ nhất là gọi

    $ ssh-agent bash
    

    hoặc là

    $ ssh-agent tcsh
    

    (hoặc một vỏ khác mà bạn sử dụng).

  2. Tải khóa riêng bạn muốn kiểm tra:

    $ ssh-add /path/to/your-ssh-private-key
    

    Bạn sẽ được yêu cầu nhập cụm mật khẩu nếu khóa được bảo vệ bằng mật khẩu.

  3. Bây giờ, như những người khác đã nói, gõ

    $ ssh-add -l
    1024 fd:bc:8a:81:58:8f:2c:78:86:a2:cf:02:40:7d:9d:3c you@yourhost (DSA)
    

    fd:bc:...là dấu vân tay bạn đang theo đuổi. Nếu có nhiều khóa, nhiều dòng sẽ được in và dòng cuối cùng chứa dấu vân tay của khóa được tải cuối cùng.

  4. Nếu bạn muốn dừng tác nhân (nghĩa là, nếu bạn đã gọi bước 1 ở trên), thì chỉ cần gõ 'exit' trên shell và bạn sẽ quay lại shell trước khi tải tác nhân ssh.

Tôi không thêm thông tin mới, nhưng hy vọng câu trả lời này rõ ràng cho người dùng ở mọi cấp độ.


Đoạn đầu tiên là không đúng sự thật ssh-add -lssh-keygen -ltrả lại cùng dấu vân tay cho một lần khóa nhất định. Ngoài ra, nó nên là một chữ thường -l, không phải chữ hoa.
Albertas Agejevas

Tôi không tranh cãi về điều đó ssh-add -lssh-keygen -ltrả lại cùng dấu vân tay cho một lần khóa nhất định. Nhưng tôi không hiểu điều gì sai với tuyên bố ban đầu của tôi ở đoạn đầu tiên. Tôi thêm một câu để làm rõ.
Wi Girls Purwanto

1
Nó chỉ đơn giản là mô phỏng để trỏ ssh-keygen vào một khóa, thay vì khởi động tác nhân, sau đó tải khóa, sau đó lấy dấu vân tay.
Albertas Agejevas

1
Nếu bạn chỉ có khóa riêng, bạn không nhất thiết phải chạy ssh-agent. Giả sử PRIVKEYđã được đặt thành tệp khóa riêng và PUBKEYđã được đặt thành tệp khóa chung (ban đầu không tồn tại), hãy làm: ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"để tạo lại khóa công khai SSH, sau đó ssh-keygen -E md5 -l -v -f "${PUBKEY}"nếu bạn muốn băm MD5 hoặc chỉ ssh-keygen -l -v -f "${PUBKEY}"khi bạn muốn băm SHA-256 (SHA-256 là mặc định bây giờ).
David Tonhofer

12

Cách nhanh nhất nếu các khóa của bạn nằm trong tác nhân SSH:

$ ssh-add -L | ssh-keygen -E md5 -lf /dev/stdin

Mỗi khóa trong tác nhân sẽ được in dưới dạng:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)

3
Cần một cách nhanh hơn để khớp các khóa của tôi với các khóa trong tài khoản GitHub của tôi và câu trả lời này đã giúp tôi làm điều đó.
evanjs

11

Sao chép nội dung từ các diễn đàn AWS tại đây, vì tôi thấy nó hữu ích cho trường hợp sử dụng của mình - Tôi muốn kiểm tra xem khóa nào phù hợp với khóa tôi đã nhập vào AWS

openssl pkey -in ~/.ssh/ec2/primary.pem -pubout -outform DER | openssl md5 -c

Trong đó: - primary.pemlà khóa riêng để kiểm tra


9
$ ssh-add -l 

cũng sẽ hoạt động trên Mac OS X v10.8 (Mountain Lion) - v10.10 (Yosemite).

Nó cũng hỗ trợ tùy chọn -Echỉ định định dạng dấu vân tay để trong trường hợp MD5 là cần thiết (nó thường được sử dụng, ví dụ như bởi GitHub), chỉ cần thêm -E md5vào lệnh.


+1 cho câu trả lời đơn giản nhất. Từ man ssh-addtùy chọn -llà "Liệt kê dấu vân tay của tất cả các danh tính hiện được đại diện bởi đại lý"
XavierStuvw

8

Trên Windows, nếu bạn đang chạy PuTTY / Cuộc thi, dấu vân tay sẽ được liệt kê khi bạn tải khóa PuTTY (.ppk) của mình vào Cuộc thi. Nó khá hữu ích trong trường hợp bạn quên cái nào bạn đang sử dụng.

Nhập mô tả hình ảnh ở đây


3
Cảm ơn bạn, Đôi khi người Linux của chúng tôi quên đi các cửa sổ, đặc biệt là khi OP đề cập đến putty.
Jmons

@ DmitriR117 tại sao bạn sơn khóa công khai màu đen vì nó có thể được cả thế giới biết đến?
Michu93

8

Đây là chức năng shell mà tôi sử dụng để lấy dấu vân tay SSH để tạo các giọt DigitalOcean :

fingerprint() {
    pubkeypath="$1"
    ssh-keygen -E md5 -lf "$pubkeypath" | awk '{ print $2 }' | cut -c 5-
}

Đặt nó vào ~/.bashrc, nguồn của bạn, và sau đó bạn có thể nhận được dấu vân tay như vậy:

$ fingerprint ~/.ssh/id_rsa.pub
d2:47:0a:87:30:a0:c0:df:6b:42:19:55:b4:f3:09:b9

2

Nếu tác nhân SSH của bạn đang chạy, đó là

ssh-add -l

để liệt kê dấu vân tay RSA của tất cả các danh tính, hoặc -L để liệt kê các khóa công khai.

Nếu đại lý của bạn không chạy, hãy thử:

ssh-agent sh -c 'ssh-add; ssh-add -l'

Và cho các khóa công khai của bạn:

ssh-agent sh -c 'ssh-add; ssh-add -L'

Nếu bạn nhận được thông báo: ' Đại lý không có danh tính. ', trước tiên bạn phải tạo khóa RSA của mình ssh-keygen.


Tôi đã cài đặt openssh, sau đó cố gắng kết nối với máy chủ bằng cách sử dụng putty. Nó đang trình bày một dấu vân tay chính ssh-ed25519 256, nhưng tôi nhận được thông báo "không có danh tính". Bạn có biết nơi này có thể được tìm thấy và liệt kê? Có một nhược điểm nào khi sử dụng khóa này, so với việc tạo khóa RSA mới không?
chúa tể

Tìm thấy nó dưới /etc/ssh/ssh_host_ed25519_key.pub. Phần thứ hai của câu hỏi vẫn còn: có bất kỳ nhược điểm nào khi sử dụng khóa được tạo tự động này không?
chúa tể

1

Đôi khi bạn có thể có một loạt các khóa trong ~/.sshthư mục của mình và không biết cái nào khớp với dấu vân tay được hiển thị bởi GitHub / Gitlab / vv.

Dưới đây là cách hiển thị tên tệp chính và dấu vân tay MD5 của tất cả các khóa trong ~/.sshthư mục của bạn :

cd ~/.ssh
find . -type f -exec printf "\n{}\n" \; -exec ssh-keygen -E md5 -lf {} \;

(Để biết ý nghĩa của các tham số, hãy tham khảo câu trả lời này về findlệnh .

Lưu ý rằng các tệp riêng tư / công khai thuộc về một khóa có cùng dấu vân tay, vì vậy bạn sẽ thấy các bản sao.


0

Google Compute Engine hiển thị dấu vân tay của máy chủ SSH trong đầu ra nối tiếp của phiên bản Linux. API có thể lấy dữ liệu đó từ GCE và không cần phải đăng nhập vào thể hiện.

Tôi đã không tìm thấy nó ở bất cứ nơi nào khác, nhưng từ đầu ra nối tiếp. Tôi nghĩ rằng dấu vân tay nên ở một số nơi thân thiện với lập trình viên hơn.

Tuy nhiên, có vẻ như nó phụ thuộc vào loại thể hiện. Tôi đang sử dụng phiên bản Debian 7 (Wheezy) F1-micro.


-1

Để kiểm tra máy chủ SSH từ xa trước khi kết nối đầu tiên, bạn có thể xem www.server-stats.net/ssh/ để xem tất cả các khóa SHH cho máy chủ, cũng như từ khi biết khóa.

Điều đó không giống như chứng chỉ SSL, nhưng chắc chắn là phải làm trước khi kết nối với bất kỳ máy chủ SSH nào lần đầu tiên.


4
Người dùng không tìm kiếm trang web của bên thứ ba, mà là một dòng lệnh từ chính hệ điều hành.
Andrew Barber

Vì vậy, về cơ bản, đó là plugin hội tụ , ngoại trừ SSH thay vì SSL và chỉ có một công chứng viên (hơi iffy). Nghe có vẻ đúng không?
Bắn Parthian

-1

Trên Fedora tôi làm điều locate ~/.sshđó cho tôi biết các phím đang ở

/root/.ssh
/root/.ssh/authorized_keys

1
OP dường như biết nơi tìm chìa khóa của họ (Đây không phải là nó ~/.ssh/id*.pub) và muốn lấy dấu vân tay của họ.
Gert van den Berg
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.