2013-04-12 6 views
6

मैं का उपयोग कर एक पर्ल स्क्रिप्ट लिखने की कोशिश कर रहा हूँ Net :: SSH :: पर्लNet :: SSH :: पर्ल अग्रेषित का उपयोग SSH कुंजी

इसकी पल में काफी सरल रूप में मैं सिर्फ एक में एक ls निष्पादित करना चाहते हैं एसएसएच पर निर्देशिका।

#!/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/"); 

यह काम करता है, लेकिन केवल समस्या मैं आदेशों को चलाने के लिए एक गढ़ सर्वर के माध्यम से कूद करने की जरूरत है, है। मैं अपनी निजी कुंजी को बुर्ज पर अग्रेषित करता हूं, लेकिन जिस बिट पर मैं फंस गया हूं वह है कि सर्वर पर होने वाली कुंजी का उपयोग करने के बजाय, पर्ल में अग्रेषित कुंजी का उपयोग कैसे करें।

क्या यह संभव है?

धन्यवाद

उत्तर

2

आप जब गढ़ सर्वर से कनेक्ट एजेंट अग्रेषण सक्षम करने के लिए है:

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

अन्य ssh पर्ल मॉड्यूल और उनके पक्ष और विपक्ष के लिए Net::OpenSSH vs Net::SSH:: modules देखते हैं।

1

आप फ़ाइल सामग्री को स्केलर संदर्भ के रूप में पास कर सकते हैं।

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

आप एक गढ़ सर्वर के माध्यम से ssh, तो SSH एजेंट अग्रेषण जा रहे हैं लेकिन अगर यह करने के लिए (के रूप में abraxxa ऊपर दिखाया गया है) सबसे अच्छा तरीका है।