Как ясно объяснено в этом вопросе, пожалуйста, дайте мне возможность использовать ssh для компьютера, использующего сценарий perl, выполнить несколько строк сценария и вернуть вывод исходному компьютеру.
Обнаружил несколько документов в Интернете по этому вопросу, но ничего не кажется информативным / понятным.
Пожалуйста, помогите.
Я соглашаюсь, что текущие примеры выглядят полезными, но не всегда работают! Мои предыдущие примеры включены в это. Я не эксперт по Perl вообще, но я починил следующее, и это работает на меня:
#!/usr/bin/perl -w
use strict;
use Net::SSH2;
my $ssh2 = Net::SSH2->new();
$ssh2->connect('tank') or die $!;
my $auth = $ssh2->auth_publickey(
'oli',
'/home/oli/.ssh/id_rsa'
);
my $chan2 = $ssh2->channel();
$chan2->blocking(1);
# This is where we send the command and read the response
$chan2->exec("uname -a\n");
print "$_" while <$chan2>;
$chan2->close;
Очевидно, Вы захотите изменить имя хоста, имя пользователя и местоположение Вашего RSA/DSA/etc ключа. Кроме того, Вам будет нужна разделять библиотека для создания этой работы хорошо над Ubuntu:
sudo apt-get install libnet-openssh-compat-perl
И наконец — принятие Вас называют его script.pl
— назовите его как так:
perl -MNet::OpenSSH::Compat=Net::SSH2 script.pl
Вы могли всегда просто выполнять системный вызов из своего сценария оболочки. Пока Вы можете ssh от оболочки, Вы ничего не должны устанавливать:
perl -e '$r=`ssh user\@host hostname`; print "Remote host:$r"'
, Если необходимо выполнить это автоматически, у Вас есть несколько опций:
Использование sshpass
Первый, установите его из репозиториев:
sudo apt-get install sshpass
Тогда выполняет это:
perl -e '$r=`sshpass -p "password" ssh user\@host hostname`; print "Remote host:$r"'