필요한 경우 SSH 비밀번호를 묻는 메시지를 표시한 다음 SSH 세션으로 연결합니다.

필요한 경우 SSH 비밀번호를 묻는 메시지를 표시한 다음 SSH 세션으로 연결합니다.

실험적으로 unzipZIP 파일을 내 서버로 파이프하는 스크립트를 작성해 보았습니다 ssh. 그러나 SSH 키가 설정되어 있지 않고 비밀번호를 묻는 메시지가 나타나면 어떻게 됩니까? 나는 여전히 ZIP 파일이 아니라 ZIP 파일에서 오기를 원합니다. 그런 다음 연결이 설정되면 stdinZIP 파일을 파이프로 연결하고 싶습니다(아마도 두 개의 별도 입력 파이프를 사용하여 하나는 SSH 비밀번호용이고 다른 하나는 실행용입니까?).unzipunzipssh

/tmp또한 현재 서버에 글을 쓰고 있는데 내 서버에서는 unzip그렇지 않은 것 같아서 삭제하고 있습니다 /dev/stdin(저는 Arch를 실행하고 있고 서버는 Ubuntu 20.04를 실행하고 있습니다). /dev/stdin세션 내부에서 파이프하면 작동 ssh하고 내 컴퓨터에서 파이프하면 작동하지만 내 컴퓨터에서 ssh.

답변1

관련없는 두 가지 질문이있는 것 같습니다.

  1. 프로그래밍 방식으로 ssh.

댓글에서 이미 지적했듯이 ssh,아니요표준 입력(파이프)에서 비밀번호를 읽습니다.터미널에서 직접. 따라서 ssh비밀번호를 파이프 할 수는 없지만 sshpass도구를 사용하여 다음과 같이 이를 수행할 수 있습니다(설치해야 함).

sshpass -p 'password' ssh user@host

또는 명령줄에 직접 제공하는 대신 파일에서 비밀번호를 읽을 수 있습니다.

sshpass -f passwordfile.txt ssh user@host

plink(나는 이것을 테스트하지 않았습니다) 다음 명령을 사용할 수도 있습니다Linux용 PuTTY바꾸다 ssh. plink비밀번호를 인수로 허용합니다.

plink -pw 'password' user@host
  1. unzip표준 입력의 입력을 허용하지 않습니다.

표시된 텍스트에 따르면 unzip -hh표준 unzip입력에서 zip 파일을 읽는 것은 전혀 지원되지 않습니다. stdin을 통해 제공되는 파일의 압축을 풀려면 funzip다음과 같이 이 유틸리티를 사용해야 합니다.

cat file.zip | funzip >file.out

또는

funzip <file.zip >file.out

funzip단, zip 파일에서는 첫 번째 파일만 추출된다는 점에 유의하세요 .

따라서 이 두 가지를 결합하려면 다음 명령을 사용해야 합니다.

cat file.zip | sshpass -p 'password' ssh user@host "funzip >file.out"

또는

sshpass -p 'password' ssh user@host "funzip >file.out" <file.zip

명령을 funzip >file.out따옴표로 묶으 file.out외딴로컬 컴퓨터가 아닌 컴퓨터(따옴표를 생략하면 파일이 로컬 컴퓨터에 생성됩니다).

관련 정보