SSH를 통해 원격 GPG 설치를 사용하여 로컬 파일을 암호화하고 서명하려고 합니다.
pv file | ssh -tt [ssh server] gpg -se -r [receipt key] > file.gpg
더블 사용티옵션은 gpg "cannot open '/dev/tty': No such device or address"
오류를 제거합니다. 그러나 gpg에 대한 입력으로 전송되는 대신 암호화되는 내용이 ssh 비밀번호 프롬프트 직후에 인쇄됩니다. 그런 다음 입력이 닫히므로 gpg에서 정지되어 서명을 위해 개인 키를 잠금 해제하기 위한 비밀번호를 요청합니다(또는 파일이 너무 큰 경우 SSH 연결이 닫힙니다).
SSH를 통해 실행되는 대화형 명령의 입력에 데이터를 전달하는 올바른 방법은 무엇입니까?
답변1
ssh
(당신이 그랬던 것처럼) 에 데이터를 전송예SSH를 통해 실행되는 명령에 입력 데이터를 전달하는 올바른 방법입니다.
여기서 문제는 gpg
필요성 이다둘읽을 입력 스트림:
- 암호화할 데이터를 읽는 하나(STDIN),
- 비밀번호를 읽기 위한 또 다른 (대화형 터미널
/dev/tty
)(이것이-t
에 옵션을 전달해야 하는 이유입니다ssh
).
두 가지를 결합하고 두 가지 목적으로 STDIN을 사용하려는 경우 두 입력을 분리하기 위해 EOF 신호를 보내는 방법이 필요합니다. 그러나 ssh
파일 끝도 읽고 전달된 입력 스트림이 닫힙니다.
제가 생각할 수 있는 유일한 실용적인 해결 방법은 데이터를 파일에 저장한 다음 사용하는 것입니다 gpg
(필수둘별도로 호출됨 ssh
)::
pv file | ssh ... '(umask 077; cat > file.unencrypted)'
ssh -t ... 'gpg -se -r ... < file.unecrypted > file.gpg; rm -f file.unencrypted'