원격 서버의 쉘 스크립트를 상상해보십시오.
#!/bin/bash
rm /test.x
가능한 경우 로컬 컴퓨터에서 이 스크립트를 실행하여 /test.x
로컬 컴퓨터의 파일을 삭제하려면 어떻게 해야 합니까? 분명히 해결책은 인증과 같은 것을 사용하되 ssh
원격 서버에서 스크립트 파일을 다운로드하지 않는 것입니다.
사실 저는 로컬 컴퓨터에서 실행되는 셸 명령의 공급자로 원격 스크립트를 사용하고 싶습니다.
답변1
어떻게든 스크립트의 내용을 다운로드해야 합니다. 넌 할 수있어
ssh remote-host cat script.bash | bash
그러나 이로 인해 동일한 문제가 발생합니다.
cat script.bash | bash
즉, 스크립트의 stdin은 스크립트 자체가 됩니다(스크립트의 명령이 사용자로부터 일부 입력을 받아야 하는 경우 문제가 될 수 있음).
더 나은 대안(그러나 ksh, zsh 또는 bash와 같은 프로세스 교체를 지원하는 셸이 필요함)은 다음과 같습니다.
bash <(ssh remote-host cat script.bash)
두 방법 모두 스크립트를 다운로드하고 해당 내용을 검색하지만 로컬에 저장하지는 않습니다. 대신 콘텐츠는 파이프로 공급되며, 파이프의 다른 쪽 끝에서 이를 읽고 해석합니다 bash
.
다음 명령을 사용하여 현재 bash 프로세스에서 원격 스크립트의 내용을 실행할 수도 있습니다.
eval "$(ssh remote-host cat script.bash)"
그러나 이는 스크립트를 실행하기 전에 스크립트를 완전히 다운로드하고 메모리에 저장합니다.
확실한 해결책은 다음과 같습니다.
. <(ssh remote-host cat script.bash)
그러나 일부 bash 버전에는 문제가 있다는 점에 유의하십시오.
답변2
스크립트가 포함된 원격 파일 시스템 마운트sshfs. 이렇게 하면 스크립트가 실행 방법을 알고 있는 로컬 파일이 됩니다.
mkdir /path/to/remote-host
sshfs remote-host:/ /path/to/remote-host
/path/to/remote-host/path/to/script
답변3
이것은 오래된 질문이지만 Google의 첫 번째 조회수에 표시되었으므로 몇 년 후에 업데이트됩니다.
scp를 사용하면 한 줄로 이 작업을 수행할 수 있습니다.
scp remote-host@/full-path/script.sh . && ./script.sh
파일은 원격 호스트에서 현재 작업 디렉터리로 복사된 다음 현재 작업 디렉터리에서 실행됩니다.