Hitung sidik jari kunci RSA

903

Saya perlu melakukan audit kunci SSH untuk GitHub, tetapi saya tidak yakin bagaimana menemukan sidik jari kunci RSA saya. Saya awalnya mengikuti panduan untuk membuat kunci SSH di Linux.

Apa perintah yang harus saya masukkan untuk menemukan sidik jari kunci RSA saya saat ini?

Zakoff
sumber
21
FWIW, saya terus kembali ke posting ini karena github adalah tempat saya melihat sidik jari pada kunci dan saya ingin memastikan saya menggunakan kunci pribadi yang sesuai. mungkin itu memang menjamin tag github karena postingan ini membantu pertanyaan terkait github?
hamx0r
4
@ hamx0r Saya kembali ke posting ini karena Gitlab juga menggunakan sidik jari itu ...
Ray Foss
1
Saya datang ke sana karena Travis, yang juga menggunakannya. : D
Per Lundberg
4
Untuk semua yang menggunakan Linux yang "terus kembali ke halaman ini", salin ini ke bashrc Anda: function fingerprint() { ssh-keygen -lf $1 -E md5 }Lalu (setelah Anda sumber bashrc) Anda bisa mendapatkan sidik jari denganfingerprint ~/.ssh/key_file
Jeff Diederiks
1
Bagi mereka yang mencoba fungsi @JeffDiederiks dan bertanya-tanya mengapa itu tidak berfungsi, fungsi Bash memerlukan trailing ;di dalam tubuh, jadi gunakan function fingerprint() { ssh-keygen -lf $1 -E md5; }saja.
tjjfvi

Jawaban:

1261

Jalankan perintah berikut untuk mengambil sidik jari SHA256 dari kunci SSH Anda ( -lberarti "daftar" alih-alih membuat kunci baru, -fberarti "nama file"):

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

Jadi misalnya, pada mesin saya perintah yang saya jalankan adalah (menggunakan kunci publik 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)

Untuk mendapatkan format sidik jari GitHub (MD5) dengan versi ssh-keygen yang lebih baru, jalankan:

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

Informasi bonus:

ssh-keygen -lfjuga berfungsi known_hostsdan authorized_keysfile.

Untuk menemukan sebagian besar kunci publik di sistem Linux / Unix / OS X, jalankan

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

(Jika Anda ingin melihat di dalam homedir pengguna lain, Anda harus root atau sudo.)

Ini ssh-add -lsangat mirip, tetapi mencantumkan sidik jari kunci yang ditambahkan ke agen Anda. (Pengguna OS X perhatikan bahwa SSH tanpa kata sandi ajaib melalui Keychain tidak sama dengan menggunakan ssh-agent.)

Marvin Pinto
sumber
5
Bagaimana cara menemukan jalan itu?
pal4life
4
Karena contoh sidik jari hex Anda adalah 32 digit, saya percaya ini akan menjadi sidik jari MD5, benar? Berbeda dengan sidik jari 40 digit, yang menunjukkan SHA1
culix
8
Pada sistem non-Ubuntu file yang relevan mungkin berada di / etc / ssh, mis. /Etc/ssh/ssh_host_rsa_key.pub
Zorawar
12
Patut dicatat bahwa sidik jari harus sama untuk kedua kunci dalam keypair publik / pribadi; jadi sidik jari .ssh/id_rsaharus sama dengan untuk .ssh/id_rsa.pub. Jadi, Anda dapat menggunakan salah satu (dan, jika Anda seperti saya dan suka menyelesaikan-tab, itu membuat pekerjaan mengambil 2 penekanan tombol lebih sedikit. Efisiensi!).
Parthian Shot
25
gunakan ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pubjika Anda tidak ingin keluaran standar sha256
user8162
676

Perintah SSH yang lebih baru akan mencantumkan sidik jari sebagai Kunci SHA256 .

Sebagai contoh:

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

Jika Anda perlu membandingkannya dengan sidik jari lama Anda juga perlu menentukan untuk menggunakan fungsi hashing sidik jari 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)

Juga tersedia: -E sha1

Perbarui ... YA ... ya ... Saya tahu ... Kunci DSA untuk SSH seharusnya tidak lagi digunakan, kunci RSA yang lebih lama atau kunci ekliptik yang lebih baru harus digunakan sebagai gantinya.

Untuk 'admin' yang terus mengedit perintah yang saya gunakan di atas. BERHENTI MENGUBAHNYA! Anda membuat perintah dan hasil yang dihasilkan salah-cocok!

anthony
sumber
6
Perlu disebutkan di sini bahwa Anda dapat memberitahu sshuntuk menunjukkan kepada Anda sidik jari MD5 server yang digunakan ssh -o FingerprintHash=md5 example.org, sebagaimana disebutkan dalam jawaban ini . (Saya hanya mencari itu, dan jawaban ini membawa saya ke yang itu, jadi saya pikir orang lain mungkin memiliki pengalaman yang sama.)
Jonathan Y.
25
Jawaban ini sangat membantu bagi mereka yang ingin membandingkan kunci mereka dengan apa yang ditampilkan github.com (yaitu MD5 yang diformat dalam hex)
hamx0r
2
Juga sangat membantu untuk membandingkan apa yang akan dilaporkan oleh dempul.
pjcard
27

Untuk melihat kunci Anda di Ubuntu, cukup masukkan perintah berikut di terminal Anda:

ssh-add -l

Anda akan mendapatkan output seperti ini: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName @ ubuntu (RSA)

Namun jika Anda mendapatkan kesalahan seperti; Could not open a connection to your authentication agent.
Maka itu berarti ssh-agent tidak berjalan. Anda dapat memulai / menjalankannya dengan: ssh-agent bash(terima kasih kepada @Richard di komentar) dan kemudian jalankan kembalissh-add -l

Komu
sumber
5
Jika Anda tidak di Ubuntu, Anda mungkin mendapatkan ini, sayangnya, "Tidak dapat membuka koneksi ke agen otentikasi Anda."
rogerdpack
1
Ini hanya berfungsi jika Anda menjalankan agen otentikasi.
Rufflewind
Untuk menjalankan agen otentikasi Anda dapat menggunakan ssh-agent bashdan melanjutkan kehidupan. Dalam hidup seperti biasa; ssh-agenttidak dijamin sebagai implementasi yang konsisten pada semua sistem.
Richard Kenneth Niescior
Tip lain untuk linux; Opsi -F (dump sidik jari) dari ssh-keygen-g3 akan menampilkan sidik jari kunci: $ ssh-keygen-g3 -F /path/to/keyfile.pub answer.ssh.com/questions/494/…
AnneTheAgile
18

Pasangan kunci (kunci pribadi dan publik) akan memiliki sidik jari yang sama; jadi jika Anda tidak dapat mengingat kunci pribadi mana yang milik kunci publik tersebut, temukan kecocokan dengan membandingkan sidik jari mereka.

Jawaban yang paling banyak dipilih oleh Marvin Vinto memberikan sidik jari dari file kunci SSH publik . Sidik jari dari kunci SSH pribadi yang sesuai juga dapat ditanyakan, tetapi memerlukan serangkaian langkah yang lebih panjang, seperti yang ditunjukkan di bawah ini.

  1. Masukkan agen SSH, jika Anda belum melakukannya. Cara termudah adalah dengan memohon

    $ ssh-agent bash
    

    atau

    $ ssh-agent tcsh
    

    (atau shell lain yang Anda gunakan).

  2. Muat kunci pribadi yang ingin Anda uji:

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

    Anda akan diminta memasukkan kata sandi jika kunci dilindungi kata sandi.

  3. Sekarang, seperti yang orang lain katakan, ketik

    $ 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:...adalah sidik jari yang Anda cari. Jika ada beberapa tombol, beberapa baris akan dicetak, dan baris terakhir berisi sidik jari dari kunci yang terakhir dimuat.

  4. Jika Anda ingin menghentikan agen (yaitu, jika Anda memanggil langkah 1 di atas), maka cukup ketik `keluar 'pada shell, dan Anda akan kembali pada shell sebelum memuat ssh agent.

Saya tidak menambahkan informasi baru, tetapi mudah-mudahan jawaban ini jelas bagi pengguna dari semua tingkatan.

Wirawan Purwanto
sumber
Paragraf pertama tidak benar, ssh-add -ldan ssh-keygen -lmengembalikan sidik jari yang sama untuk keypair yang diberikan. Juga, itu harus huruf kecil -l, bukan huruf besar.
Albertas Agejevas
Saya tidak menentang itu ssh-add -ldan ssh-keygen -lmengembalikan sidik jari yang sama untuk keypair yang diberikan. Tetapi saya tidak mengerti apa yang salah dengan pernyataan asli saya pada paragraf pertama. Saya menambahkan kalimat untuk menjelaskan.
Wirawan Purwanto
1
Ini hanya lebih mudah untuk mengarahkan ssh-keygen ke kunci, daripada memulai agen, lalu memuat kunci, lalu mendapatkan sidik jari.
Albertas Agejevas
1
Jika Anda hanya memiliki kunci pribadi, Anda tidak perlu menjalankannya ssh-agent. Dengan asumsi PRIVKEYtelah diatur ke file kunci pribadi, dan PUBKEYtelah diatur ke file kunci publik (awalnya tidak ada), lakukan: ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"untuk membuat kembali kunci publik SSH, maka ssh-keygen -E md5 -l -v -f "${PUBKEY}"jika Anda ingin hash MD5 atau hanya ssh-keygen -l -v -f "${PUBKEY}"jika Anda ingin hash SHA-256 (SHA-256 menjadi default sekarang).
David Tonhofer
12

Cara tercepat jika kunci Anda ada di agen SSH:

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

Setiap kunci dalam agen akan dicetak sebagai:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)
cmcginty
sumber
3
Diperlukan cara yang lebih cepat untuk mencocokkan kunci saya dengan yang ada di akun GitHub saya dan jawaban ini membantu saya melakukan hal itu.
evanjs
11

Memproduksi ulang konten dari forum AWS di sini, karena menurut saya bermanfaat untuk kasus penggunaan saya - saya ingin memeriksa kunci mana yang cocok dengan yang telah saya impor ke AWS

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

Di mana: - primary.pemadalah kunci pribadi untuk diperiksa

Phil
sumber
9
$ ssh-add -l 

juga akan bekerja pada Mac OS X v10.8 (Mountain Lion) - v10.10 (Yosemite).

Ini juga mendukung opsi -Euntuk menentukan format sidik jari sehingga jika diperlukan MD5 (sering digunakan, misalnya oleh GitHub), cukup tambahkan -E md5ke perintah.

geeklizzard
sumber
+1 untuk jawaban paling sederhana. Dari man ssh-addopsi tersebut -ladalah "Daftar sidik jari dari semua identitas yang saat ini diwakili oleh agen"
XavierStuvw
8

Di Windows, jika Anda menjalankan Putty / Pageant, sidik jari terdaftar saat Anda memuat kunci Putty (.ppk) ke dalam Pageant. Ini sangat berguna jika Anda lupa yang mana yang Anda gunakan.

Masukkan deskripsi gambar di sini

Dmitri R117
sumber
3
Terima kasih, Terkadang kita orang Linux lupa tentang windows, terutama seperti yang disebutkan OP dempul.
Jmons
@ DmitriR117 mengapa Anda melukis kunci publik hitam karena dapat diketahui seluruh dunia?
Michu93
8

Ini adalah fungsi shell yang saya gunakan untuk mendapatkan sidik jari kunci SSH untuk membuat tetesan DigitalOcean :

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

Masukkan ke dalam ~/.bashrc, sumber, dan kemudian Anda bisa mendapatkan sidik jari sebagai berikut:

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

Jika agen SSH Anda berjalan, itu benar

ssh-add -l

untuk mendaftar sidik jari RSA dari semua identitas, atau -Luntuk daftar kunci publik.

Jika agen Anda tidak berjalan, coba:

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

Dan untuk kunci publik Anda:

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

Jika Anda menerima pesan: ' Agen tidak memiliki identitas. ', maka Anda harus membuat kunci RSA Anda ssh-keygenterlebih dahulu.

kenorb
sumber
Saya menginstal openssh, kemudian mencoba untuk terhubung ke server menggunakan dempul. Ini menyajikan sidik jari kunci ssh-ed25519 256, tapi saya mendapatkan pesan "tanpa identitas". Apakah Anda tahu di mana kunci ini dapat ditemukan dan dicantumkan? Apakah ada kerugian menggunakan kunci ini, vs menghasilkan kunci RSA baru?
lordcheeto
Ditemukan di bawah /etc/ssh/ssh_host_ed25519_key.pub. Bagian kedua dari pertanyaan tetap ada: apakah ada kerugian menggunakan kunci yang dibuat secara otomatis ini?
lordcheeto
1

Kadang-kadang Anda dapat memiliki banyak kunci di ~/.sshdirektori Anda , dan tidak tahu mana yang cocok dengan sidik jari yang ditunjukkan oleh GitHub / Gitlab / etc.

Berikut cara menunjukkan nama file kunci dan sidik jari MD5 dari semua kunci di ~/.sshdirektori Anda :

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

(Untuk arti parameter, lihat jawaban ini tentang findperintah .

Perhatikan bahwa file pribadi / publik yang dimiliki oleh satu kunci memiliki sidik jari yang sama, sehingga Anda akan melihat duplikat.

Dan Dascalescu
sumber
0

Google Compute Engine menunjukkan sidik jari kunci host SSH dalam output serial contoh Linux. API dapat memperoleh data itu dari GCE, dan tidak perlu masuk ke instance.

Saya tidak menemukannya di tempat lain selain dari keluaran serial. Saya pikir sidik jari harus di tempat yang lebih ramah-programmer.

Namun, tampaknya itu tergantung pada jenis instance. Saya menggunakan instance Debian 7 (Wheezy) f1-micro.

re Paul
sumber
-1

Untuk memeriksa server SSH jarak jauh sebelum koneksi pertama, Anda dapat melihat www.server-stats.net/ssh/ untuk melihat semua kunci SHH untuk server, serta dari saat kunci diketahui.

Itu tidak seperti sertifikat SSL, tapi jelas harus dilakukan sebelum menghubungkan ke server SSH untuk pertama kalinya.

p974
sumber
4
Pengguna tidak mencari situs web pihak ketiga, tetapi baris perintah dari OS itu sendiri.
Andrew Barber
Jadi, ini pada dasarnya plugin konvergensi , kecuali untuk SSH, bukan SSL, dan hanya dengan satu notaris (agak rapuh). Kedengarannya benar?
Parthian Shot
-1

Pada Fedora saya melakukan locate ~/.sshyang memberitahu saya kunci ada di

/root/.ssh
/root/.ssh/authorized_keys
Jesse William Mac Dougall
sumber
1
OP tampaknya tahu di mana menemukan kunci mereka (Ini bukan itu, ~/.ssh/id*.pubadalah) dan ingin mendapatkan sidik jari mereka.
Gert van den Berg