2013-07-17 3 views
2

Я пробовал модули perl Net :: SSH: Perl и Net :: OpenSSH безрезультатно. Пересылка X11 действительно работает, потому что если я делаю «ssh root @ host» и выполняю приложение X, такое как «xterm», я получаю окно назад.SSH с пересылкой X11 в Perl

Вот некоторые вещи, которые я пробовал:

$self->{'ssh'} = Net::OpenSSH->new("root:[email protected]".$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:[email protected]".$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 [email protected] xterm` 

я скорее получить бы модули работать, если это возможно, но если я могу как-то открыть двунаправленную трубу, общаться с SSH и получать данные, когда я хочу (подобно тому, как я могу $ себя -> { 'SSH '} -> cmd() и получать вывод в любое время в моем скрипте), я сделаю это. Я просто не знаю, с чего начать. Кто-нибудь еще это делал раньше?

+0

«Нет» означает, никакое новое окно не открывается, но вы не получите сообщение об ошибке? – innaM

+0

Не открывается окно. Ошибка всегда относится к переменной DISPLAY. Когда переадресация X11 работает, SSH создает псевдо-дисплей, такой как localhost: 400, который является SSH-туннелем и соответствующим образом устанавливает переменную DISPLAY. –

ответ

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

+0

Я видел это, но я опасался установки модуля dev. –

+0

Ну, тогда вам нужно подождать, пока стабильный релиз ... –

+0

Ах винт, он использует версию dev. Это так просто и работает. Возможно ли установить несколько версий модуля. Большое спасибо! –

Смежные вопросы