2

perl モジュールの Net::SSH:Perl と Net::OpenSSH を試しましたが、うまくいきませんでした。「ssh root@host」を実行して「xterm」などの X アプリケーションを実行すると、ウィンドウが返されるため、X11 転送は機能します。

ここに私が試したいくつかのことがあります:

    $self->{'ssh'} = Net::OpenSSH->new("root:PW@".$hostname);
    print $self->{'ssh'}->capture("env"); #The display variable is not set so it won't work
    print $self->{'ssh'}->capture("xterm");

いいえ

    $self->{'ssh'} = Net::OpenSSH->new("root:PW@".$hostname, master_opts => ['-X' => '']);
    print $self->{'ssh'}->capture("env"); #The display variable is not set so it won't work
    print $self->{'ssh'}->capture("xterm"); #Nope
    print $self->{'ssh'}->capture({master_opts => ['-X']}, "xterm"); #Nope

いいえ、今は Net::SSH::Perl です

    $self->{'ssh'} = Net::SSH::Perl->new("$hostname", debug=>0);
    $self->{'ssh'}->login("root","pass");
    my ($stdout, $stderr, $exit) = $self->{'ssh'}->cmd("xterm"); #Nope

いいえ

    $self->{'ssh'} = Net::SSH::Perl->new("$hostname", debug=>0, options=>["ForwardX11 yes"]);
    $self->{'ssh'}->login("root","pass");
    my ($stdout, $stderr, $exit) = $self->{'ssh'}->cmd("xterm"); #Nope

実際に機能するのは、次のようにすることだけなので、X11 転送が Perl で機能していることがわかります。

    `ssh root@host xterm`

可能であればモジュールを動作させたいのですが、どうにかして双方向パイプを開き、SSH と通信して、必要なときにデータを受信できるのであれば ($self->{'ssh'}->cmd()私のスクリプトでいつでも出力を受け取ります)、私はそれを行います。どこから始めたらいいのかわからない。他の誰かが前にこれをしましたか?

4

1 に答える 1

2

の開発版にNet::OpenSSHは新しいオプションがありますforward_X11。これはうまくいくようです:

my $ssh = Net::OpenSSH->new("localhost", forward_X11 => 1);
print $ssh->capture({forward_X11 => 1}, "env"); # includes DISPLAY=localhost...
print $ssh->capture({forward_X11 => 1}, "xclock"); # starts the xclock program

コンストラクターと実際のコマンドの両方で新しいオプションを指定する必要があることに注意してください。

http://www.perlmonks.org/?node_id=1028837も参照してください。

于 2013-07-17T14:10:37.970 に答える