我嘗試了perl模塊Net :: SSH:Perl和Net :: OpenSSH無濟於事。因爲如果我執行「ssh root @ host」並執行一個X應用程序(如「xterm」),X11轉發功能就會起作用,因爲我得到一個窗口。在Perl中使用X11轉發的SSH
這裏有一些事情我已經試過:
$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()並在我的腳本中隨時接收輸出),我會這樣做。我只是不知道從哪裏開始。其他人之前做過?
「不」的意思,沒有新的窗口打開,但你沒有得到錯誤信息? – innaM
無窗打開。該錯誤總是與DISPLAY變量有關。當X11轉發正在工作時,SSH會創建僞顯示,如localhost:400(這是SSH隧道),並適當設置DISPLAY變量。 –