
このタスクを自動化するにはどうすればいいでしょうか?
1) あなたは A にいます。2) あなたは B に ssh で接続します。3) あなたは B でスクリプトを実行しますが、そのスクリプトには A で認識されているパラメータが必要です。
まず、SSHで接続を開いたときに値を送信できるのではないかと考えました。次に、おそらく1)と2)の間で、スクリプト全体をBの同じ場所にscpします(古いものを置き換えます)。しかし、それでも、実行するB のスクリプトは? (つまり、最後のステップを自動化する方法です。もちろん、ssh の後に手動で実行することもできます。)
もう一つの考えは、おそらく ssh を完全に破棄することです。B に Web ページがあるので、スクリプトを何らかの方法で「内部の」Web インターフェイスから呼び出すことは可能でしょうか?
それとも、まったく違う方法でやるのでしょうか?
答え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