2012-03-28 10 views
-2

システムコマンドを使用して、リモートサーバからのフラグ付きのperlスクリプトを呼び出そうとしています。コマンドを発行すると、私の最後の2つのフラグが何らかの奇妙な理由で無視されてしまいます。いくつか私にいくつかのガイダンスを提供してください。前もって感謝します!!!!perlのSystem()

#!/usr/bin/perl 
print "Webserver?\n"; 
my $webserver = <STDIN>; 

print "PORT?\n"; 
my $port = <STDIN>; 

system("ssh -t <HOST> \"sudo su - root -c '/WebAppSA/apache/V2.2/install_apache/webmaster.pl -C -name:$webserver -port:$port - cert:cert.com'\""); 

エラーメッセージ は、Webサーバーの一意のポートを決定することはできません。 設定を確認してもう一度お試しください。中止... -bash:行1:-port:8284:行2:-cert:cert.com:コマンド

+2

これはデモンストレーションコードの可能性が高いと私は理解していますが、検証されていないエスケープされていないユーザー入力をリモートマシンのルートシェルに渡していることに注意してください。 (あなた自身の子シェルも危険にさらされています)リストや間接オブジェクトを使って 'system()'を呼び出すことを見てください。[per docs](http://perldoc.perl.org/functions/system.html )。代わりに 'quotemeta()'や '\ Q'は裸の補間よりも優れています。 – pilcrow

+0

[Perlスクリプト内でのXML編集]の複製が可能です(http://stackoverflow.com/questions/9877485/xml-editing-inside-a-perl-script) –

+0

@per the docs: 'quotemeta'は通常のexpresionsですシェル引用のためではありません。 – salva

答えて

6

あなた$ウェブサーバと$ポート変数で終わるされているコマンドが見つかりませんが -bashが見つかりません改行文字 "\ n" chomp関数を使用します。適切にし、その後Net::OpenSSH SSH接続を処理するための

my $webserver = <STDIN>; 
chomp $webserver; 
... 
+0

ありがとうございました – Badboy

1

使用sudoを:

my $ssh = Net::OpenSSH->new($host); 
$ssh->system(sudo => '/WebAppSA/apache/V2.2/install_apache/webmaster.pl', 
        '-C', "-name:$webserver", "-port:$port", '-cert:cert.com'); 

ネット:: OpenSSHは適切にすべてを引用の世話をします。