Nie ma wbudowanej metody, aby to zrobić, ale wystarczy utworzyć test, który niczego nie modyfikuje i pozwala po prostu sprawdzić hasło.
Nie określiłeś, więc zakładam, że używasz wersji GnuPG mniejszej niż v2 i używasz Linuksa z Bash jako interpreter wiersza poleceń.
Podam polecenie tutaj, a poniżej wyjaśnię, co robi każda część - (uwaga: poniższe dotyczy wersji 1 serii GnuPG, poniżej wersja 2 serii GnuPG)
echo "1234" | gpg --no-use-agent -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"
Po pierwsze, potokuj jakiś tekst do podpisania do GnuPG echo "1234" |
- ponieważ tak naprawdę nie chcemy niczego podpisywać, to tylko test, więc podpiszemy jakiś bezużyteczny tekst.
Następnie mówimy gpg, aby nie używał agenta kluczowego z --no-use-agent
; jest to ważne później, ponieważ w zależności od Twojego głównego agenta, po pomyślnym zakończeniu może nie zwracać „0”, a to wszystko, co chcemy zrobić - zweryfikować powodzenie hasła.
Następnie mówimy gpg, aby umieścił podpisane dane bezpośrednio w /dev/null
pliku, co oznacza, że odrzucamy je i nie zapisujemy wyniku na terminalu - UWAGA: jeśli nie używasz jakiegoś wariantu Linux / Unix, ten plik może nie istnieć. W systemie Windows może być konieczne zezwolenie na zapisanie podpisanych danych na ekranie, po prostu pomijając rozszerzenie-o /dev/null
część.
Następnie określamy klucz, z którym chcemy wykonać nasz test, używając --local-user 012345
. Możesz użyć KeyID w celu uzyskania maksymalnej precyzji lub użyć nazwy użytkownika, w zależności od tego, która najlepiej odpowiada Twoim potrzebom.
Następnie określamy -as
, co włącza tryb wyjścia ascii i ustawia tryb kontekstu dla podpisywania. Następnie -
po prostu mówi GnuPG, aby pobierał dane do podpisania ze standardowego wejścia, co jest pierwszą częścią polecenia, które wydaliśmy echo "1234" |
.
I na koniec mamy && echo "A message that indicates success"
- „&&” oznacza, że jeśli poprzednie polecenie się powiodło, wydrukuj tę wiadomość. Zostało to dodane tylko dla przejrzystości, ponieważ w przeciwnym razie powodzenie powyższego polecenia byłoby sygnalizowane brakiem danych wyjściowych.
Mam nadzieję, że jest to wystarczająco jasne, abyś zrozumiał, co się dzieje i jak możesz go wykorzystać, wykonując testy, które chcesz przeprowadzić. Jeśli jakakolwiek część jest niejasna lub nie rozumiesz, z przyjemnością wyjaśnię. Powodzenia!
[EDYTUJ] - Jeśli używasz GnuPG v2, powyższe polecenie będzie wymagało niewielkiej modyfikacji, na przykład:
echo "1234" | gpg2 --batch --passphrase-fd 1 -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"
Powodem jest to, że GnuPG v2 oczekuje, że hasło zostanie pobrane przez agenta, więc nie możemy wyłączyć używania agenta z --no-use-agent
pożądanym skutkiem; zamiast tego musimy powiedzieć GnuPG v2, że chcemy uruchomić proces „wsadowy” i pobrać hasło ze STDIN (standard in) przy użyciu opcji --passphrase-fd 1
.
gpg --local-user <KEYID> -as
. To po prostu pozwala agentowi poprosić o hasło i powie Ci, czy było poprawne (wtedy nic nie robi).gpg -o /dev/null --local-user <KEYID> -as <(echo 1234) && echo "The correct passphrase was entered for this key"
--passphrase-fd 1
? czytać ze standardowego wyjścia? Działa to dla mniegpg2 -aso - <(echo 1234); echo $?
. Służyecho RELOADAGENT | gpg-connect-agent
do zapominania haseł.To jest krótsza linia poleceń, aby sprawdzić, czy hasło jest prawidłowe:
źródło
Dla mnie prostym sposobem sprawdzenia hasła jest użycie
gpg --passwd
skrótu. Próbuje zmienić hasło, a krok polega na potwierdzeniu starego hasła, a następnie możesz kliknąć „anuluj” w monicie o nowe hasło, dzięki czemu hasło pozostanie nienaruszone.źródło
Ostrzeżenie nie używaj echa,
gpg -o /dev/null
jak sugeruje tutaj najlepsza odpowiedź. Spowoduje to, że / dev / null będzie miał nieprawidłowe uprawnienia i uszkodzi/dev/null
plik. Możesz sprawdzić uprawnienia do pliku / dev / null podczas uruchamiania tego polecenia, aby to udowodnić.Możesz użyć tego:
Stworzyłem również skrypt bash do tego (ten działa z Centos 8). Ten skrypt zapyta o hasło, jeśli jest nieprawidłowe, będzie nadal prosić o wprowadzenie prawidłowego hasła. Również jeśli podasz błędny lub nieistniejący KEY_ID jako argument, może to również potwierdzić:
Przykładowe dane wyjściowe, jeśli żadne hasło nie jest buforowane w gpg-agent:
Przykładowe dane wyjściowe, jeśli wprowadzono nieprawidłowe hasło (będzie nadal pytać):
Przykładowe dane wyjściowe, jeśli wprowadzono prawidłowe hasło:
Gdy prawidłowe hasło jest zapisywane w pamięci podręcznej, przy następnym uruchomieniu tego skryptu nie zostanie wyświetlony monit o wprowadzenie hasła. Więc ten skrypt daje odpowiedź na twoje pytanie; „Potwierdź, że używam prawidłowego hasła”
źródło