Pergunta

Estou escrevendo um script Perl que precisa transferir arquivos entre computadores usando o SCP. Conheço a autenticação de chave pública, mas preciso que o script seja totalmente automatizado, por isso não posso visitar as máquinas para configurar as chaves antes que o script seja executado.

Existe alguma maneira de passar a senha para o SCP a partir do script Perl ou configurar as teclas de dentro do script Perl?

Esse script será executado como parte de um script de compilação que também reima o disco rígido que eu preciso para executar o script. Portanto, não posso estar lá para configurar as teclas toda vez que o projeto for construído.

Foi útil?

Solução

Você poderia usar o perl Espero Módulo, veja Um exemplo no Fórum dos Consultores da Well House.

Sua documentação tem um Exemplo de telnet que é facilmente alterado para SSH.

Net :: ssh :: espera é outro módulo Perl para fazer exatamente o que você deseja. Eu não usei este anteriormente, no entanto.

Outras dicas

Você pode usar Net :: ssh :: perl. Abaixo está o código de amostra que você pode usar.

#!/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;

Esse código simplesmente executará o 'comando' fornecido na máquina remota e fornecerá a saída no sistema local. Portanto, para, em vez de SCP, você pode usar esse script com o comando 'CAT' para capturar a saída do 'nome do arquivo de gato' no sistema local e redirecionar a saída no arquivo no sistema local.

Espero que isto ajude.

Faça uso de ssh-agent. E se você usa o GNOME, o agente SSH do Gnome Keyring é maravilhoso.

Basta criar teclas que não possuem senhas.

Você pode usar um Key ssh (sem senha).

#!/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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top