このタスクをどのように自動化できますか?
1)あなたはAにいます。 2)SSH経由でBを入力します。 3)Aに既知のパラメータを必要とするスクリプトをBで実行します。
まず、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
そのような仮定が安全であればいいえ一重引用符を含めます(そうでない場合は、次を参照)。ここあるいは、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