로컬 매개변수 값을 사용하여 원격 스크립트 실행

로컬 매개변수 값을 사용하여 원격 스크립트 실행

이 작업을 어떻게 자동화할 수 있나요?

1) 당신은 A에 있습니다. 2) SSH를 통해 B를 입력합니다. 3) A에 알려진 매개변수가 필요한 스크립트를 B에서 실행합니다.

먼저 SSH 연결을 열 때 값을 보낼 수 있을 것이라고 생각했습니다. 그런 다음 아마도 1)과 2) 사이에서 전체 스크립트를 B의 동일한 위치로 scp합니다(이전 위치 대체). 그런데 어떻게 해야 합니까?구현하다B의 스크립트? (즉, 마지막 단계를 자동화하는 방법입니다. 물론 ssh 이후에 수동으로 실행할 수도 있습니다.)

또 다른 아이디어는 ssh를 완전히 버리는 것입니다. B에 웹 페이지가 있으므로 "비하인드 스토리" 웹 인터페이스를 통해 스크립트를 호출할 수 있습니까?

아니면 완전히 다른 방식으로 하시겠습니까?

답변1

myparameter=foobar
ssh user@server "myscript $myparameter"

이는 myscript foobar서버에서 실행됩니다.

답변2

(이것은 후속 조치입니다.승인된 답변에 대한 내 의견.)

공백이 포함 되면 $myparameter서버 측에서 분할됩니다. Bash의 printf에는 %q사용할 수 있는 형식이 있습니다. 예:

$ myparameter='hello; rm somefile'
$ ssh user@server "echo $myparameter"
hello
rm: cannot remove `somefile': No such file or directory

$ ssh user@server "echo $(printf '%q' "$myparameter")"
hello; rm somefile

답변3

$myparameter그렇게 가정하는 것이 안전하다면아니요작은따옴표를 포함합니다(그렇지 않으면 다음을 참조하세요).여기또는 printf '%q' ...janmoesen의 솔루션을 사용하면 작은따옴표를 사용하여 $myparameter서버 측의 공간 분할 문제를 피할 수 있습니다.

myparameter="foo \" bar"
#myparameter="foo \" ' bar"

ssh localhost "set -xv; printf '%s\n' myscript '${myparameter}'"
ssh localhost "set -xv; echo $(set -xv; printf '%q' "$myparameter")"

답변4

나는 10년 된 질문에 대답하기를 주저합니다. 특히 이미 완벽한 대답이 있을 때 그렇습니다. 그러나 "원격" 스크립트는 실제로는 그렇지 않다는 점에 유의하십시오.필요간단히 B에 있습니다. 이는 (a) 매개변수 대체를 간단하게 만들고 (b) 스크립트를 원격 시스템에 배치하는 것이 좋은지 여부에 대한 복잡성(보안 문제/기타 우려 사항)을 제거합니다.

또 다른 방법은 ssh를 실행하는 것입니다.여기에 문서가 있습니다입력하다. 이 경우 매개변수 대체가 수행됩니다.현지의, 원격 시스템이 아닌(문서 구분 기호를 인용하지 않는 한(이 경우 EOF)):

portnum=1234
[email protected]
mydir=/var/www/bar
param=foo

ssh -p$portnum $target /bin/bash <<EOF
  set -e;
  cd $mydir;
  # create remote 3-character file '/var/www/bar/myfile' containing 'foo'
  echo -n $param > myfile
EOF

관련 정보