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
が印刷されます。
ご協力いただければ幸いです。
私はこれを追加するのを忘れました:それはエラーが13行目にあると言います。このコードは最初にコメントアウトされた別の行を持っていないので、実際には12行目です。 – Hramyzn
私は混乱しています。ここにsshが関わっているのはなぜですか? – melpomene
実際、それは非常に良い質問です。答えは、私の混乱とグーグルのスキルは私にそれをもたらしました。私はPerlの 'exec();'関数から始まり、成功していないことを思い出し、残りはぼやけています。しかし、ねえ、私はそれを作った、あなたが興味を持っている場合は以下を参照してください。 – Hramyzn