Bunu yalnızca OpenSSH araçlarıyla yapmanın bir yolu olmayabilir.
Ancak OpenSSL araçları ile kolayca yapılabilir. Aslında, bunu yapmanın en az iki yolu vardır. Aşağıdaki örneklerde ~/.ssh/id_rsa
özel anahtarınızdır.
Bir yol dgst kullanıyor :
openssl dgst -sign ~/.ssh/id_rsa some-file
Diğeri pkeyutl kullanıyor :
openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file
Bunların her ikisi de standart çıktıya ikili bir imza yazar. dgst bir alan -hex
imzanın formla ilgili bazı detayları ile metin biçimini yazdırır seçeneği. pkeyutl-hexdump
biraz daha az kullanışlı olan bir seçenek alır . Her ikisi de hem RSA hem de DSA anahtarlarını kabul edecektir. Çıktının formatı hakkında hiçbir fikrim yok. İki komut farklı formatlar üretir. Ben izlenimini almak pkeyutl daha modern olarak kabul edilir dgst .
Bu imzaları doğrulamak için:
openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file
ve:
openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file
Buradaki sorun şudur $PUBLIC_KEY_FILE
. OpenSSL, OpenSSH'nin ortak anahtar formatını okuyamıyor, bu yüzden sadece kullanamazsınız id_rsa.pub
. Birkaç seçeneğin var, hiçbiri ideal değil.
OpenSSH 5.6 veya daha yeni bir sürümüne sahipseniz, görünüşte bunu yapabilirsiniz:
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem
Bu, OpenSSL'in okuyabileceği PEM formatında standart çıktıya ortak anahtarı yazacak.
Özel anahtarınız varsa ve bu bir RSA anahtarıysa, genel anahtarı ondan çıkarabilirsiniz (PEM kodlu özel anahtar dosyasının, genel anahtarın türetilmesi mümkün olmadığından, genel anahtarın bir kopyasını içerdiğini düşünüyorum. özel anahtarın kendisinden) ve şunu kullanın:
openssl rsa -in ~/.ssh/id_rsa -pubout
Bir DSA eşdeğeri var mı bilmiyorum. Bu yaklaşımın, özel anahtarın sahibinden, ortak anahtarı çıkartıp doğrulayıcıya göndermesi gereken bazı işbirliğini gerektirdiğini unutmayın.
Son olarak, genel anahtarı OpenSSH'den OpenSSL formatına dönüştürmek için Lars adlı bir bölüm tarafından yazılmış bir Python programını kullanabilirsiniz .