Как я могу передать файл, используя scp без пароля из сценария Perl? - PullRequest
4 голосов
/ 29 сентября 2010

Я пишу Perl-скрипт, который должен передавать файлы между компьютерами с помощью scp.Я знаю об аутентификации с открытым ключом, но мне нужно, чтобы скрипт был полностью автоматизирован, поэтому я не могу посещать машины, чтобы настроить ключи до запуска скрипта.

Есть ли способ пропуститьпароль для scp из скрипта Perl или настройки ключей из скрипта perl?

Этот скрипт будет запускаться как часть скрипта сборки, который также отображает жесткий диск, на котором мне нужно запустить скрипт.Поэтому я не могу быть там, чтобы устанавливать ключи каждый раз, когда проект создается.

Ответы [ 6 ]

3 голосов
/ 30 сентября 2010

Вы можете использовать Net :: SSH :: Perl . Ниже приведен пример кода, который вы можете использовать.

#!/usr/bin/perl -w
use strict;
use Net::SSH::Perl
my $cmd = 'command';
my $ssh = Net::SSH::Perl->new("hostname", debug=>0);
$ssh->login("username","password");
my ($stdout,$stderr,$exit) = $ssh->cmd("$cmd");
print $stdout;

Этот код просто запускает данную «команду» на удаленном компьютере и выдаст вам вывод в вашей локальной системе. Таким образом, вместо scp, вы можете использовать этот скрипт с командой 'cat' для захвата вывода 'cat filename' в локальной системе и перенаправления вывода в файл в локальной системе.

Надеюсь, это поможет.

2 голосов
/ 30 сентября 2010

Используйте ssh-agent.И если вы используете Gnome, агент SSH Gnome Keyring будет замечательным.

1 голос
/ 29 сентября 2010

Вы можете использовать модуль Perl Expect , см. пример на форуме консультантов Well House .

В его документации есть пример telnet который легко изменяется для SSH.

Net :: SSH :: Expect - это еще один модуль Perl, который делает именно то, что вам нужно.Я не использовал этот ранее, хотя.

0 голосов
/ 27 сентября 2012
#!/usr/bin/perl -w
######################################################
#                                                    #
#                                #
#       Script to send files to server    #
#               Author: Jurison Murati               #
#                                   #
######################################################

use strict;
use Net::SCP::Expect;
use File::Copy;
use IO::Compress::Gzip qw(gzip $GzipError);
my $host = "192.168.0.1";
my $user = "user";
my $pwd = "password";
my $RemoteDir = </nodes>;
my $file;
my $displaydate= `date +'%Y%m%d%H%M%S'`;
print "Filloi dergimi date $displaydate\n";
my $scp = Net::SCP::Expect->new(host=>$host,user=>$user,password=>$pwd,recursive=>1);
my $dir = '/arch';
        opendir(DIR, $dir) or die $!;
while (my $file = readdir(DIR)) {
next if ($file =~ m/^\./);
        $scp->scp("$dir/$file","$RemoteDir") or die $scp->{errstr};
print "file $dir/$file moved on date $displaydate\n";
}
exit 0;
0 голосов
/ 30 сентября 2010

Вы можете использовать SSH-ключ (без пароля).

0 голосов
/ 29 сентября 2010

Просто создайте ключи без паролей.

...