2013-04-12 40 views
6

Tôi đang cố viết một kịch bản perl bằng cách sử dụng Net :: SSH :: PerlNet :: SSH :: Perl sử dụng khóa SSH được chuyển tiếp

Nó khá đơn giản vào lúc này vì tôi chỉ muốn thực hiện một ls trong một thư mục trên 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/"); 

Công trình này, nhưng vấn đề duy nhất là, tôi cần phải nhảy qua máy chủ pháo đài để chạy lệnh. Tôi chuyển tiếp khóa riêng của tôi đến pháo đài, nhưng bit tôi đang mắc kẹt là làm thế nào để sử dụng phím chuyển tiếp trong perl, thay vì sử dụng một khóa mà sẽ có được trên máy chủ.

Điều này có khả thi không?

Cảm ơn

Trả lời

2

Bạn phải kích hoạt đại lý giao nhận khi kết nối với máy chủ pháo đài:

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

Đối với ssh khác module Perl và ưu và nhược điểm của họ thấy Net::OpenSSH vs Net::SSH:: modules.

1

Bạn có thể chuyển nội dung tệp dưới dạng tham chiếu vô hướng.

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

Tuy nhiên nếu bạn định ssh qua máy chủ bastion, thì chuyển tiếp tác nhân SSH là cách tốt nhất để làm điều này (như abraxxa đã hiển thị ở trên).

Các vấn đề liên quan