2013-04-12 40 views
6

我試圖用寫一個perl腳本的Net :: SSH :: Perl的的Net :: SSH :: Perl中使用轉發SSH密鑰

它的那一刻很簡單,我只是想執行的一個LS目錄通過SSH。

#!/usr/bin/perl 

use Net::SSH::Perl; 

@KEYFILE = ("/user/.ssh/id_rsa"); 
$ssh = Net::SSH::Perl->new($host, debug=>1, identity_files=>\@KEYFILE) 

my $host = "hostname"; 
my $user = "user"; 

#-- set up a new connection 
my $ssh = Net::SSH::Perl->new($host, debug=>1, identity_files=>\@KEYFILE) 
#-- authenticate 
$ssh->login($user); 
#-- execute the command 
my($stdout, $stderr, $exit) = $ssh->cmd("ls -l /home/user/"); 

這可行,但唯一的問題是,我需要跳過一個堡壘服務器來運行命令。轉移我的私鑰給堡壘,但我堅持的對位是如何使用轉發鍵在Perl,而不是使用它必須是服務器上的一個鍵。

這可能嗎?

感謝

回答

2

您必須啓用代理轉發連接到服務器的堡壘時:

my $ssh = Net::SSH::Perl->new(
    $host, 
    debug   => 1, 
    identity_files => \@KEYFILE, 
    options  => [ 
     'ForwardAgent yes', 
    ], 
); 

對於其他SSH的Perl模塊及其利弊看Net::OpenSSH vs Net::SSH:: modules

1

您可以在文件傳遞內容的標量引用。

my $ssh = Net::SSH::Perl->new($host, identity_files => [ \$file_contents ]); 

但是,如果你正在經歷一個堡壘服務器SSH,然後轉發SSH代理是要做到這一點(如abraxxa已經如上圖所示)的最佳方式。