스크립트를 복사하지 않고 원격 시스템에서 스크립트 실행

스크립트를 복사하지 않고 원격 시스템에서 스크립트 실행

에 스크립트가 있고 server A에서 스크립트를 실행해야 server B하지만 스크립트를 에 복사하고 싶지 않습니다 server B.

텍스트 파일을 스크립트에 매개변수로 전달해야 합니다.

어떻게 해야 하나요?

답변1

간단히 cat스크립트를 사용하여 SSH 세션에 파이프할 수 있습니다.

cat /path/to/local/script.sh | ssh user@remote

이는 대부분의 경우 작동하지만 스크립트는 원격의 기본 로그인 셸에 의해 해석됩니다. 스크립트가 다른 쉘용으로 작성된 경우에는 작동하지 않습니다.

답변2

개인적으로 찾은 가장 좋은 방법은 Base64를 사용하여 복사하고 디코딩한 다음 실행하는 것입니다. 이렇게 하면 1) 파일을 생성하고 원격 호스트에서 실행 가능하게 만들 필요가 없으며 2) 인코딩이나 재미있는 문자에 문제가 발생하지 않습니다. 이것을 매우 쉽게 해석된 언어로 확장할 수 있습니다(독립 실행형 프로그램이어야 함).

cat script.sh | base64 | ssh user@host "base64 -d - | bash"

스파게티와 약간 비슷하지만 개념이 있습니다.

답변3

대신 함수를 사용하세요!

스크립트를 함수로 변환하고 매개변수를 사용하여 전달합니다.

그래서:

ssh user@host -tq "function foo(){ echo $*;}; foo hello world"

하지만 매번 함수를 매개변수로 작성하는 것은 비현실적입니다.

작업을 더 쉽게 하려면 원격 시스템에서 로컬 함수를 호출하는 데 도움이 되는 함수를 생성하세요.

foo () { 
    echo "${@}" 
}
bar () { 
    echo ${#} 
}

ssh_func() {
    ssh -tq user@host "function $(typeset -f ${1}); "  ${2:+"${@:2}"}; 
    # typeset -t (prints function's body chunk) to be sent with args
}
ssh_func foo hello world # this will call foo on remote machine
ssh_func bar hello world

관련 정보