실험적으로 unzip
ZIP 파일을 내 서버로 파이프하는 스크립트를 작성해 보았습니다 ssh
. 그러나 SSH 키가 설정되어 있지 않고 비밀번호를 묻는 메시지가 나타나면 어떻게 됩니까? 나는 여전히 ZIP 파일이 아니라 ZIP 파일에서 오기를 원합니다. 그런 다음 연결이 설정되면 stdin
ZIP 파일을 파이프로 연결하고 싶습니다(아마도 두 개의 별도 입력 파이프를 사용하여 하나는 SSH 비밀번호용이고 다른 하나는 실행용입니까?).unzip
unzip
ssh
/tmp
또한 현재 서버에 글을 쓰고 있는데 내 서버에서는 unzip
그렇지 않은 것 같아서 삭제하고 있습니다 /dev/stdin
(저는 Arch를 실행하고 있고 서버는 Ubuntu 20.04를 실행하고 있습니다). /dev/stdin
세션 내부에서 파이프하면 작동 ssh
하고 내 컴퓨터에서 파이프하면 작동하지만 내 컴퓨터에서 ssh
.
답변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
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
면외딴로컬 컴퓨터가 아닌 컴퓨터(따옴표를 생략하면 파일이 로컬 컴퓨터에 생성됩니다).