Jawaban:
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 -q
ke 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" )
ssh-keygen -y -e -f id_rsa
tidak akan memeriksa id_rsa sama sekali tetapi hanya mengembalikan nilai dari id_rsa.pub. Jadi mis. Jika Anda echo 5 > id_rsa
menghapus kunci privat, maka lakukan diff, diff akan berlalu! Juga, menjalankan di ssh-keygen -yef foo
mana foo bukan kunci yang valid (dan tidak memiliki foo.pub yang sesuai) akan memblokir menunggu input pengguna, jadi berhati-hatilah menggunakan ini dalam skrip.
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.
Jika mereka pada sistem lokal Anda, tetap id_rsa.pub
di Anda $HOME/.ssh/authorized_keys
dan ssh
untuk localhost
menggunakan id_rsa
kunci. Jika berhasil, maka mereka cocok.
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
ssh -v
banyak membantu juga.