Cara memeriksa apakah pasangan kunci publik / swasta RSA cocok

72

Saya punya dua file, id_rsadan id_rsa.pub. Perintah apa yang dapat digunakan untuk memvalidasi jika mereka adalah pasangan yang valid ?

Ryan
sumber
Saya akan mengkonfirmasi jawaban Michuelnik; itu menyelamatkan saya dari keharusan membuat pasangan kunci baru, terima kasih. ssh -vbanyak membantu juga.
Chris K

Jawaban:

93

Saya lebih suka ssh-keygen -y -e -f <private key>cara daripada jawaban yang diterima dari Bagaimana Anda menguji keypair DSA publik / swasta? pada Stack Overflow.

ssh-keygen -y -e -f <private key>mengambil kunci pribadi dan mencetak kunci publik yang sesuai yang dapat langsung dibandingkan dengan kunci publik yang tersedia. (Petunjuk: waspadai komentar atau opsi-kunci.)

(Bagaimana bisa melakukan itu? Saya hanya bisa berharap kunci publik dikodekan secara langsung atau tidak langsung dalam kunci pribadi ...)

Saya membutuhkan ini sendiri dan menggunakan Bash satu-liner berikut. Seharusnya tidak menghasilkan apa-apa jika kunci milik bersama. Terapkan sedikit -qke skrip diff dan hanya diff set kode pengembalian yang tepat.

PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )
Michuelnik
sumber
1
@MichaelHampton: sekarang saya mengerti komentar Anda. "jawaban yang diterima" harus merujuk pada pertanyaan di stackoverflow bukan pertanyaan ini ...
Michuelnik
1
@ Sirch: Saya pikir keputusan kunci mana yang privat dan mana yang publik adalah murni acak karena kedua kunci itu sama. Apa yang disandikan satu kunci hanya dapat didekripsi dengan yang lain. Dan jika satu kunci dapat diperoleh dari yang lain ini semua tidak akan berhasil.
Michuelnik
1
@Michuelnik Anda dapat memperoleh kunci publik dari kunci pribadi. Anda tidak dapat memperoleh kunci pribadi dari kunci publik. Kami tidak berbicara tentang materi yang dienkripsi.
Sirch
1
@Michuelnik imho, pertanyaannya adalah di luar topik tentang SO dan di-topik di sini (dan / atau Superuser). imho, itu tidak boleh ditandai sebagai duplikat dan bukannya ditandai di sana untuk migrasi. Tapi itu dibahas pada keduanya sehingga saya suka berbagi informasi yang lebih lengkap.
Chris K
10
Selama id_rsa.pub ada, ssh-keygen -y -e -f id_rsatidak akan memeriksa id_rsa sama sekali tetapi hanya mengembalikan nilai dari id_rsa.pub. Jadi mis. Jika Anda echo 5 > id_rsamenghapus kunci privat, maka lakukan diff, diff akan berlalu! Juga, menjalankan di ssh-keygen -yef foomana foo bukan kunci yang valid (dan tidak memiliki foo.pub yang sesuai) akan memblokir menunggu input pengguna, jadi berhati-hatilah menggunakan ini dalam skrip.
32

Bergantung pada di mana Anda mendapatkan file kunci publik yang Anda uji, jawaban yang diterima dapat memberikan hasil positif palsu. Ini karena perilaku yang dijelaskan dalam komentar oleh @drewbenn. Khususnya, ketika opsi -e digunakan dengan file kunci pribadi sebagai parameter opsi -f, itu hanya beo (tapi memformat ulang) apa yang ada di file kunci publik terkait.

Dengan kata lain,

ssh-keygen -y -f id_rsa

(tampaknya) menghasilkan nilai kunci publik, dan

ssh-keygen -y -e -f id_rsa

cukup dan output (dan memformat ulang) kunci di id_rsa.pub yang ada apa pun itu .

Dalam kasus saya, saya harus memverifikasi bahwa pasangan belum rusak. Jadi, saya memutuskan untuk membandingkan yang berikut:

ssh-keygen -y -f id_rsa | cut -d' ' -f 2

dengan

cut -d' ' -f 2 id_rsa.pub

Karena itu:

diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)

Mungkin ini tidak fleksibel, tetapi lebih baik untuk kebutuhan saya. Mungkin itu membantu orang lain.

petani anak
sumber
5
Ini benar-benar harus mengganti jawaban yang diterima atau paling tidak mengungguli dalam hal upvotes.
thomanski
Terima kasih! Perintah ini tidak berfungsi dengan kunci dengan frasa sandi, tidak meminta itu secara interaktif. Saya mengekstrak dua () isi perintah ke file dan membuatnya berbeda, yang berfungsi.
Yaroslav Nikitenko
5

Jika mereka pada sistem lokal Anda, tetap id_rsa.pubdi Anda $HOME/.ssh/authorized_keysdan sshuntuk localhostmenggunakan id_rsakunci. Jika berhasil, maka mereka cocok.

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
Michael Hampton
sumber