2016-09-28 8 views
1

現在、私は、リモートマシンにsshingでperlのシステムを使用して実行スクリプトを実行しています:はperlのシステムからSSH経由でbashスクリプトに環境変数を渡す

system("ssh -t remote $dir/bashscript> $dir/stdout.stdout 2> $dir/stderr.stderr &"); 

は、私が上bashscriptに環境変数を渡したいです私のリモートマシン(特定のディレクトリ)。それを行う最善の方法は何ですか?そして、議論を受け入れるために私のbashscriptに何を追加すればよいですか?値が信頼できないソースから来る場合、これは危険なことができることを

system("ssh -t remote FOO='dir/dir/filename.stderr' $dir/bashscript> $dir/stdout.stdout 2> $dir/stderr.stderr &"); 

注:

答えて

1

はこれを試してみてください。パスする前に値をエスケープする必要があります。

いずれの場合も
my $foo='some value here'; 
$foo=~s/'/'\\''/g; # escape the ' 
system("ssh -t remote env FOO='$FOO' $dir/bashscript> $dir/stdout.stdout 2> $dir/stderr.stderr &"); 

bashscript$FOOを経由して値にアクセスすることができます。たとえば、あなたはこのような何かを行うことができます。 @ rednebの警告年代のすべてで

+0

になることを、なぜそれがだろう確信している場合を消毒について危険な? – acbh

+0

リモートサーバが許可している場合は、 'ssh -o SendEnv = FOO ... 'を使用することが望ましいでしょう。 – chepner

+0

また$ FOOを適切に受け入れるために私のbashスクリプトをリファクタリングする最良の方法は何ですか? – acbh

0

入力

ssh remotehost FOO=bar \; export FOO \; script > out 2> err 

またはリモート・ホスト上のシェルがbash、よりコンパクト

ssh remotehost export FOO=bar \; script > out 2> err 
関連する問題