현재까지 가능한 해결책

현재까지 가능한 해결책

이 작업을 현명하게 수행할 수 있는 방법이 있습니까?

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. 또 다른 해결책을 제안하고,
  2. 예제 1과 관련하여 scp의 비정상적인 동작("시스템 호출 중단")을 설명합니다(버그나 일종의 "보안 기능"이라고 가정합니다).

  3. 비밀번호 입력 방법을 설명하세요. 백그라운드에서 시작된 작업을 stdin에서 읽는 방법은 무엇입니까?

  4. (3과 관련됩니다.) stdout과 stderr이 모두 로 리디렉션되었음에도 불구하고 예제 2의 scp가 비밀번호 프롬프트를 인쇄하는 이유를 설명하십시오 /dev/null.


관련 정보