이 작업을 현명하게 수행할 수 있는 방법이 있습니까?
scp user@host:/path/to/file /dev/tty | openssl [options] | less
파일을 생성하거나 매개변수에 직접 비밀번호를 입력할 필요가 없나요?
문제는 둘 다 비밀번호를 요구하지만 시작 순서(따라서 비밀번호를 요구하는 순서)가 정의되지 않았다는 것입니다.
scp
먼저 완료한 다음 시작하면 문제가 없지만 openssl
임시 파일이 없습니다.
현재까지 가능한 해결책
- 출력을
scp
변수에 넣고 변수를 넣습니다openssl
(작은 파일에서만 작동하며 이진 데이터 등에 문제가 있을 수 있다고 생각됩니다). - 비밀번호를 파일(안좋다)
- 키(더 나은 것?)
- 명명된 파이프 사용
명명된 파이프 버전 1
mkfifo pipe && {
scp user@host:/path/to/file pipe # asks for password, then waits
# for read from pipe to finish
# which will only happen after the
# password for openssl was supplied
# => must ^Z and enter the password
# => `pipe: Interrupted system call'
openssl [options] -in pipe | less
}
명명된 파이프 버전 2
mkfifo pipe && {
scp user@host:/path/to/file pipe & # asks for password (and works when
# password is entered) despite being
# put in background (what? how?
# can someone explain?)
openssl [options] -in pipe | less # `bad password read'
}
명명된 파이프 버전 3
mkfifo pipe && {
scp user@host:/path/to/file pipe | # asks for password first
openssl [options] -in pipe | less # asks for password after scp's
# password has been entered
# and everything works fine
}
명령을 전환해도 도움이 되지 않습니다.
openssl [options] -in <(scp user@host:/path/to/file /dev/tty) | less
작동하지 않습니다.
누구든지 제발
- 또 다른 해결책을 제안하고,
예제 1과 관련하여 scp의 비정상적인 동작("시스템 호출 중단")을 설명합니다(버그나 일종의 "보안 기능"이라고 가정합니다).
비밀번호 입력 방법을 설명하세요. 백그라운드에서 시작된 작업을 stdin에서 읽는 방법은 무엇입니까?
- (3과 관련됩니다.) stdout과 stderr이 모두 로 리디렉션되었음에도 불구하고 예제 2의 scp가 비밀번호 프롬프트를 인쇄하는 이유를 설명하십시오
/dev/null
.