Gentoo Linux GPG poprawnie szyfruje plik przesłany przez parametr, ale wyświetla „Nieodpowiedni ioctl dla urządzenia” podczas odczytu ze standardowego wejścia

23

Używam Gentoo Hardened z jądrem 4.1.7-hardened-r1 i próbuję zaszyfrować plik przy użyciu GPG z sesji powłoki otwartej z SSH i przy DISPLAYwyłączonej zmiennej w celu użycia przekleństw pinentry w celu wyświetlenia hasła. Za pomocą gpg -o file.gpg --symmetric fileI mogę szyfrować dobrze. Za pomocą pv file | gpg -o file.gpg --symmetricotrzymuję następujący komunikat o błędzie:

gpg-agent[30745]: command get_passphrase failed: Inappropriate ioctl for device
RAKK
źródło

Odpowiedzi:

41

Powinieneś ustawić swoją zmienną GPG_TTY, aby działała, jak w tym dokumencie :

GPG_TTY=$(tty)
export GPG_TTY

Te dwie linie powinny znajdować się w twoim .bashrc(zakładając bash), więc są uruchamiane za każdym razem, gdy otwierasz nową sesję terminala.

Istnieje jednak inne rozwiązanie: w bash możesz uruchomić swój pvplik i udawać, że jest to plik, używając podstawiania procesów:

gpg -o file.gpg --symmetric <(pv file)

W związku z tym może nie być dobrym pomysłem podłączanie rzeczy do programów, które oczekują dodatkowych danych wejściowych. Może działać inaczej niż oczekiwano.

TNW
źródło
Czy jest jakiś sposób, aby zmienić lub naprawić to zachowanie? Właśnie próbowałem dokładnie tego samego polecenia read-from-stdin na Debianie, a GPG poprosiło o moje hasło.
RAKK
@RAKK Czy można jednak odszyfrować wynikowy plik?
TNW
Tak, bez żadnych problemów w Debianie. Utwórz mały plik z losowymi danymi o nazwie dsfargeg, zaszyfruj go pv dsfargeg | gpg -o dsfargeg.gpg --symmetric, wprowadź hasło, gdy zostaniesz o to poproszony, odszyfruj dane wyjściowe za pomocą gpg -o dsfargeg.gpg.dec --decrypt dsfargeg.gpg, wprowadź swoje hasło i porównaj oryginalny i odszyfrowany plik sha256sum dsfargeg dsfargeg.gpg.dec. Oba skróty będą takie same.
RAKK
@RAKK Masz rację. Wygląda na to, że gpg otwiera się /dev/ttyna Debianie. W moim przypadku była to wersja 1.4; Od tego czasu gpg został nieco zmieniony. To podejście mogło zostać odrzucone z jakiegoś powodu - możesz chcieć dowiedzieć się więcej na własną rękę (lub może to być łatka specyficzna dla Debiana). W związku z tym prawdopodobnie lepiej nie liczyć na to. Wyśledzę ślady, aby sprawdzić, co dokładnie dzieje się w nowszym gpg (mam 2.1).
TNW
O dziwo, znalazłem rozwiązanie! Ustawienie zmiennej GPG_TTY robi to za mnie. Odpowiednio zaktualizuję odpowiedź.
TNW