Może nie być sposobu, aby to zrobić za pomocą samych narzędzi OpenSSH.
Ale można to zrobić dość łatwo za pomocą narzędzi OpenSSL. W rzeczywistości istnieją co najmniej dwa sposoby, aby to zrobić. W poniższych przykładach ~/.ssh/id_rsa
jest twój klucz prywatny.
Jednym ze sposobów jest użycie dgst :
openssl dgst -sign ~/.ssh/id_rsa some-file
Drugi używa pkeyutl :
openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file
Oba zapisują binarny podpis na standardowe wyjście. dgst wybiera -hex
opcję, aby wydrukować reprezentację tekstową z pewnymi szczegółami dotyczącymi formy podpisu. pkeyutl ma -hexdump
opcję, która jest nieco mniej przydatna. Oba zaakceptują zarówno klucze RSA, jak i DSA. Nie mam pojęcia, jaki jest format wyjściowy. Oba polecenia tworzą różne formaty. Mam wrażenie, że pkeyutl jest uważany za bardziej nowoczesny niż dgst .
Aby zweryfikować te podpisy:
openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file
i:
openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file
Problem jest tutaj $PUBLIC_KEY_FILE
. OpenSSL nie może odczytać formatu klucza publicznego OpenSSH, więc nie możesz po prostu używać id_rsa.pub
. Masz kilka opcji, żadna idealna.
Jeśli masz wersję OpenSSH w wersji 5.6 lub nowszej, najwyraźniej możesz to zrobić:
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem
Który zapisze klucz publiczny na standardowym wyjściu w formacie PEM, który OpenSSL może odczytać.
Jeśli masz klucz prywatny i jest to klucz RSA, możesz z niego wyodrębnić klucz publiczny (zakładam, że plik klucza prywatnego zakodowany w PEM zawiera kopię klucza publicznego, ponieważ nie można uzyskać klucza publicznego z samego klucza prywatnego) i użyj tego:
openssl rsa -in ~/.ssh/id_rsa -pubout
Nie wiem, czy istnieje odpowiednik DSA. Zauważ, że takie podejście wymaga pewnej współpracy ze strony właściciela klucza prywatnego, który będzie musiał wyodrębnić klucz publiczny i wysłać go do potencjalnego weryfikatora.
Na koniec możesz użyć programu w języku Python napisanego przez faceta o nazwie Lars, aby przekonwertować klucz publiczny z OpenSSH na format OpenSSL.