2016-09-06 43 views
1

EDIT:これを最初に読んでください:私がここでやろうとしたのは極端なトンネルビジョンの結果です。ポストは面白いかもしれませんが有益ではありません。あなたはコマンドを実行するために自分のサーバーにSSHする必要はありませんが、私は思っていたもの...CGIとPerlのNet :: OpenSSHモジュールを使用してリモートLinuxサーバーでシステムコマンドを実行する方法は?

タイトルはかなりそうです。私は、Linuxサーバー(Debianの場合)上にCGI Webサイトをホストしたいと思います。ボタンをクリックすると、サーバー自体でシステムコマンドを実行します。私はPerlを通してこれをやっていて、モジュールはNet::OpenSSHです。

ここに問題があります。私はサーバ自体のターミナルを介してスクリプトを実行できますが、私はsudoを使用する場合。コマンドが単に "ls"であるかどうかは関係ありません。当然、モジュールを呼び出すウェブサイト上のボタンをクリックすると、それも機能しません。ここで

が私のコードです:

#!/usr/bin/perl 
use strict; 
use warnings; 
use Net::OpenSSH; 

print("Content-type: text/html\n\n"); 

print("TEST"); 

my $ssh = Net::OpenSSH->new('localhost', user => 'myusername', password => 'mypassword'); 

$ssh->system("ls") or die "ERROR: " . $ssh->error; 

print("TEST2"); 

sudoを使用して、端末でそれを実行し、スクリプトがTEST出力し、その後、私のホームディレクトリ(デスクトップ、ドキュメントなど)内のフォルダを一覧表示し、最終的には、TEST2 。私はsudoの、それだけでTESTを印刷し、このエラーメッセージそれ以降使用していない場合は

ERROR: unable to establish master SSH connection: the authenticity of the target host can't be established; the remote host public key is probably not present on the '~/.shh/known_hosts' file at opensshtest.pl line 13.

私はすべてのSSHキーを使用していないよ、私は、ユーザー名とパスワードを入力しようとしていますそれをスクリプトにハードコーディングします。

また、ブラウザで開くと、最初のTESTが印刷されます。

ご協力いただければ幸いです。

+0

私はこれを追加するのを忘れました:それはエラーが13行目にあると言います。このコードは最初にコメントアウトされた別の行を持っていないので、実際には12行目です。 – Hramyzn

+0

私は混乱しています。ここにsshが関わっているのはなぜですか? – melpomene

+0

実際、それは非常に良い質問です。答えは、私の混乱とグーグルのスキルは私にそれをもたらしました。私はPerlの 'exec();'関数から始まり、成功していないことを思い出し、残りはぼやけています。しかし、ねえ、私はそれを作った、あなたが興味を持っている場合は以下を参照してください。 – Hramyzn

答えて

0

もう一度、質問を投稿した人です。私はこの仕事をしようと何時間も費やしてきたし、ここで質問を投稿してから1時間後に解決策を見つけたのは面白い。しかしここにあります:

Net :: OpenSSHオブジェクト(userpasswordなどの行)の作成に追加の引数としてmaster_opts => [-o => "StrictKeyChecking=no"]を追加しました。

+0

ああ、ちなみに、一度コードを実行した後にその行を削除しても、それはまだ動作します。その行を使ってコードを実行すると、サーバー上でいくつかのSSHキーの黒い魔法が実行されています(私はまだまだこれに新しいです)。 – Hramyzn

+0

モジュールdocsの[TROUBLESHOOTING]セクション(https://metacpan.org/pod/Net::OpenSSH#TROUBLESHOOTING)は、それを説明しようとします。具体的には、[3](https://metacpan.org/pod/) Net :: OpenSSH#run-ssh-from-the-command-line)を実行します。 – salva

関連する問題