파이프라인에서 openssl 암호화 루틴의 출력을 어떻게 사용합니까?

파이프라인에서 openssl 암호화 루틴의 출력을 어떻게 사용합니까?

openssl 매뉴얼에는 openssl enc기본적으로 표준 출력이 사용된다고 명시되어 있습니다.

그러나 파일을 해독할 때 표준 출력에 문제가 있습니다. 출력을 임의의 애플리케이션(예: grep)으로 파이프하면 openssl 오류가 발생합니다.

error writing output file

해결책이 있나요?

답변1

이 오류 메시지는 파이프의 읽기 끝이 닫혀서 openssl이 더 이상 파이프에 쓸 수 없음을 의미합니다. 예를 들어 입력을 모두 읽지 않고 빠르게 종료되는 명령에 파이프를 연결하면 이런 일이 발생합니다.

$ dd count=400 if=/dev/urandom | openssl enc | true
error writing output file

일반적으로 아무것도 찾지 못하는 간단한 grep이 작동합니다.

$ dd count=400 if=/dev/urandom | openssl enc | grep notgoingtomatch

그러나 grep이 일치하고 입력 파일이 바이너리 쓰레기 덩어리라는 것을 발견하면 읽기가 중지되고 파이프가 손상됩니다.

$ dd count=400 if=/dev/urandom | openssl enc | grep a
error writing output file
Binary file (standard input) matches

(이 경우 오류를 방지하기 위해 사용할 수 있습니다 grep -a).

또한 grep 출력을 호출기로 파이프하는 경우(예:더 적은, 종료더 적은이로 인해 모든 결과가 표시되기 전에 grep의 파이프 출력이 손상되고, 쓸 내용이 더 있으면 grep이 종료되어 openssl 파이프도 손상됩니다.

관련 정보