젠투 리눅스 GPG는 매개 변수를 통해 전달 된 파일을 올바르게 암호화하지만 표준 입력에서 읽을 때 "장치에 부적절한 ioctl"을 던집니다


23

커널 4.1.7-hardened-r1로 Gentoo Hardened를 실행 중이며 SSH에서 열린 쉘 세션에서 GPG DISPLAY를 사용하고 암호 프롬프트에 pinentry-curses를 사용하기 위해 변수를 비활성화 하여 파일을 암호화하려고 합니다. 사용하면 gpg -o file.gpg --symmetric file잘 암호화 할 수 있습니다. 사용 pv file | gpg -o file.gpg --symmetric하면 다음과 같은 오류 메시지가 나타납니다.

gpg-agent[30745]: command get_passphrase failed: Inappropriate ioctl for device

답변:


41

이 문서 에서처럼 GPG_TTY 변수가 작동하도록 설정해야 합니다 .

GPG_TTY=$(tty)
export GPG_TTY

이 두 줄은 .bashrc(bash 가정)에 있어야하므로 새 터미널 세션을 열 때마다 실행됩니다.

bash pv에서는 프로세스 대체를 사용하여 파일을 실행 하고 파일 인 것처럼 가장 할 수 있습니다 .

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

따라서 추가 입력이 필요한 프로그램에 항목을 파이프 인하는 것은 좋지 않습니다. 예상과 다르게 작동 할 수 있습니다.


이 동작을 변경하거나 수정할 수있는 방법이 있습니까? 지금 막 데비안에서 정확히 똑같은 read-from-stdin 명령을 시도했지만 GPG가 암호를 요구했습니다.
RAKK

@RAKK 결과 파일을 해독 할 수 있습니까?
TNW

예, 데비안에 문제가 없습니다. 라는 임의의 데이터와 작은 파일을 만듭니다 dsfargeg그것을 암호화 pv dsfargeg | gpg -o dsfargeg.gpg --symmetric, 메시지가 표시되면 암호를 입력과 출력 해독 gpg -o dsfargeg.gpg.dec --decrypt dsfargeg.gpg, 암호를 입력하고 원본과 함께 해독 된 파일을 비교 sha256sum dsfargeg dsfargeg.gpg.dec. 두 해시가 동일합니다.
RAKK

@RAKK 당신이 맞아요. gpg가 /dev/tty데비안에서 시작 되는 것 같습니다 . 그러나 이것은 1.4 버전이었습니다. gpg는 이후 약간의 정밀 검사를 받았습니다. 그 접근 방식은 어떤 이유로 떨어졌을 수도 있습니다. 스스로 더 많은 것을 찾고 싶을 수도 있습니다 (또는 일부 데비안 특정 패치 일 수도 있습니다). 따라서, 당신이 그것에 의존하지 않는 것이 좋을 것입니다. 새로운 gpg에서 정확히 무슨 일이 일어나고 있는지 확인하기 위해 흔적을 찾아 다닐 것입니다 (2.1이 있습니다).
TNW

이상하게도 해결책을 찾았습니다! GPG_TTY 변수를 설정하면 나에게 적합합니다. 이에 따라 답변을 업데이트하겠습니다.
TNW
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.