로컬 컴퓨터의 원격 서버에서 쉘 스크립트 실행

로컬 컴퓨터의 원격 서버에서 쉘 스크립트 실행

원격 서버의 쉘 스크립트를 상상해보십시오.

#!/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

파일은 원격 호스트에서 현재 작업 디렉터리로 복사된 다음 현재 작업 디렉터리에서 실행됩니다.

관련 정보