Как может я ssh в сценарии Perl?

Я хочу к SSH к серверу и выполняю простую команду как "идентификатор" и получаю вывод его и храню его в файл на моем основном сервере. У меня нет полномочий установить Сеть:: SSH, который сделал бы мою задачу очень легкой. Предоставьте мне решение для этого. Я пытался использовать обратные галочки, но я не могу сохранить вывод на машине, от которой работает мой сценарий.

10
задан arka.b 28 September 2015 в 07:20
поделиться

4 ответа

Если у вас настроены ключи хоста ssh, вы можете просто запустить системную команду ssh, а затем указать команду, которая будет запускаться на машине после этого. Например:

`ssh user@remoteserver.domain.com id`

Вы должны иметь возможность «пережевывать» / сохранять этот вывод.

0
ответ дан 3 December 2019 в 16:09
поделиться

Вы всегда можете установить модули локально, и это тот метод, который вы должны рассмотреть; однако, вы должны быть в состоянии обойтись

#!/usr/bin/perl

use strict;
use warnings;

my $id = qx/ssh remotehost id 2>&1/;

chomp $id;

print "id is [$id]\n"
8
ответ дан 3 December 2019 в 16:09
поделиться

Если предположить, что вы находитесь в среде, подобной моей, где вы не можете добавлять дополнительные модули и не можете создать файл 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();
0
ответ дан 3 December 2019 в 16:09
поделиться

Лучший способ удаленного запуска команд с помощью 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;
14
ответ дан 3 December 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: