
이 작업을 어떻게 자동화할 수 있나요?
1) A에 있습니다. 2) B에 SSH로 연결합니다. 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
그럴 것이라고 가정하는 것이 안전하다면~ 아니다작은따옴표를 포함합니다(그렇지 않으면 다음을 참조하세요).여기또는 janmoesen의 솔루션을 사용하면 서버 측의 공간 분할 문제를 피하기 위해 printf '%q' ...
작은따옴표를 넣을 수 있습니다 .$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