Mungkin tidak ada cara untuk melakukan ini dengan alat OpenSSH saja.
Tapi itu bisa dilakukan dengan mudah dengan alat OpenSSL. Faktanya, setidaknya ada dua cara untuk melakukannya. Dalam contoh di bawah ini, ~/.ssh/id_rsa
adalah kunci pribadi Anda.
Salah satu caranya adalah menggunakan dgst :
openssl dgst -sign ~/.ssh/id_rsa some-file
Yang lainnya menggunakan pkeyutl :
openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file
Keduanya menulis tanda tangan biner ke output standar. dgst mengambil -hex
opsi akan mencetak representasi tekstual, dengan beberapa detail tentang bentuk tanda tangan. pkeyutl mengambil -hexdump
opsi yang sedikit kurang berguna. Keduanya akan menerima kunci RSA dan DSA. Saya tidak tahu apa format outputnya. Dua perintah menghasilkan format yang berbeda. Saya mendapat kesan bahwa pkeyutl dianggap lebih modern daripada dgst .
Untuk memverifikasi tanda tangan itu:
openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file
dan:
openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file
Masalahnya di sini adalah $PUBLIC_KEY_FILE
. OpenSSL tidak dapat membaca format kunci publik OpenSSH, jadi Anda tidak bisa hanya menggunakan id_rsa.pub
. Anda memiliki beberapa opsi, tidak ada yang ideal.
Jika Anda memiliki versi OpenSSH 5.6 atau lebih baru, Anda dapat melakukannya:
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem
Yang akan menulis kunci publik ke output standar dalam format PEM, yang dapat dibaca OpenSSL.
Jika Anda memiliki kunci pribadi, dan ini adalah kunci RSA, maka Anda dapat mengekstrak kunci publik darinya (saya berasumsi bahwa file kunci pribadi yang di-encode dengan PEM menyertakan salinan kunci publik, karena tidak mungkin untuk mendapatkan kunci publik dari kunci pribadi itu sendiri), dan gunakan itu:
openssl rsa -in ~/.ssh/id_rsa -pubout
Saya tidak tahu apakah ada yang setara dengan DSA. Perhatikan bahwa pendekatan ini memerlukan kerja sama dari pemilik kunci pribadi, yang harus mengekstrak kunci publik dan mengirimkannya ke calon verifikasi.
Terakhir, Anda dapat menggunakan program Python yang ditulis oleh chap bernama Lars untuk mengonversi kunci publik dari OpenSSH ke format OpenSSL.