2013-04-12 15 views
6

Próbuję napisać skrypt Perla przy użyciu Net :: SSH :: PerlNet :: SSH :: Perl korzystając przekazywane SSH klucz

Jest to dość proste, jak w tej chwili po prostu chcę wykonać w krótkim ls katalog przez 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/"); 

To działa, ale jedynym problemem jest to, że muszę przejść przez serwer bastionu, aby uruchomić polecenia. Przesyłam swój klucz prywatny do bastionu, ale utknąłem na tym, jak użyć przekazywanego klucza w perlu, zamiast używać klucza, który musiałby znajdować się na serwerze.

Czy to możliwe?

Dzięki

Odpowiedz

2

Musisz włączyć przekazywanie agenta podczas łączenia się z serwerem bastionowego:

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

Dla innych ssh modułów Perl i ich wady i zalety zobaczyć Net::OpenSSH vs Net::SSH:: modules.

1

Możesz przekazać zawartość pliku jako odniesienie skalarne.

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

Jednak jeśli masz zamiar ssh za pośrednictwem serwera bastion, a następnie przekazania środka SSH jest najlepszym sposobem, aby to zrobić (jak abraxxa wykazały powyżej).

Powiązane problemy