ローカルパラメータ値を使用したリモートスクリプトの実行

ローカルパラメータ値を使用したリモートスクリプトの実行

このタスクをどのように自動化できますか?

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

関連情報