Я хочу к SSH к серверу и выполняю простую команду как "идентификатор" и получаю вывод его и храню его в файл на моем основном сервере. У меня нет полномочий установить Сеть:: SSH, который сделал бы мою задачу очень легкой. Предоставьте мне решение для этого. Я пытался использовать обратные галочки, но я не могу сохранить вывод на машине, от которой работает мой сценарий.
Если у вас настроены ключи хоста ssh, вы можете просто запустить системную команду ssh, а затем указать команду, которая будет запускаться на машине после этого. Например:
`ssh user@remoteserver.domain.com id`
Вы должны иметь возможность «пережевывать» / сохранять этот вывод.
Вы всегда можете установить модули локально, и это тот метод, который вы должны рассмотреть; однако, вы должны быть в состоянии обойтись
#!/usr/bin/perl
use strict;
use warnings;
my $id = qx/ssh remotehost id 2>&1/;
chomp $id;
print "id is [$id]\n"
Если предположить, что вы находитесь в среде, подобной моей, где вы не можете добавлять дополнительные модули и не можете создать файл Identity, то вы можете использовать этот сценарий в качестве отправной точки.
Если вы можете настроить ssh ключи, то просто используйте команду backticks, которая уже была опубликована, хотя вам может понадобиться опция -i
#!/usr/bin/perl
use warnings;
use strict;
use Expect;
use Data::Dumper;
my $user = 'user';
my $pw = 'password';
my $host = 'host';
my $cmd = 'id';
my $exp = new Expect;
$exp->log_file("SSHLOGFILE.txt");
$exp->log_stdout(0);
$exp->raw_pty(1);
my $cli = "/usr/bin/ssh $user\@$host -o StrictHostKeyChecking=no -q $cmd";
$exp->spawn($cli) or die "Cannot spawn $cli: $!\n";
$exp->expect(5,
[ qr /ssword:*/ => sub { my $exph = shift;
$exph->send("$pw\n");
exp_continue; }] );
my $read = $exp->exp_before();
chomp $read;
print Dumper($read);
$exp->soft_close();
Лучший способ удаленного запуска команд с помощью SSH
$ ssh user@host "command" > output.file
Вы можете использовать это либо в bash, либо в perl. Однако, если вы хотите использовать perl, вы можете установить модули perl в ваш локальный каталог, как предложил brian в своем комментарии или из Perl FAQ в "How do I keep my own module/library directory?". Вместо использования Net::SSH я бы предложил использовать Net::SSH::Perl с приведенным ниже примером.
#!/usr/bin/perl -w
use strict;
use lib qw("/path/to/module/");
use Net::SSH::Perl;
my $hostname = "hostname";
my $username = "username";
my $password = "password";
my $cmd = shift;
my $ssh = Net::SSH::Perl->new("$hostname", debug=>0);
$ssh->login("$username","$password");
my ($stdout,$stderr,$exit) = $ssh->cmd("$cmd");
print $stdout;