hi
I have written this perl script to transfer a *.txt file via SFTP.
It should:
1.) create and write log file.
2.) create backup subfolder.
3.) transfar *.txt file via sftp.
4.) move *.txt file and log file to the backup directory.
5.) send a mail with the log file if transfer completed.
#!/usr/bin/perl -w
use strict;
use warnings;
use File::Copy;
use File::Find;
use Net::Netrc;
use Net::SFTP;
use MIME::Lite;
use Getopt::Std;
use Mail::Sender;
my $server = "X.X.X.X";
my $user = "myuser";
my $password = "";
my %args = (ssh_args => []);
$args{debug} = 1;
$args{user} = "myuser";
# file
my $file = "/srv/*.txt";
# ftp directories
my $remote_directory = "";
my $linux = "admin\@domain.net";
my $recipient1 = "recipient1\@domain.net";
my $recipient2 = "recipient2\@domain.net";
my $recipient3 = "recipient3\@domain.net>";
# write the log
BEGIN
{
use CGI::Carp qw(carpout);
my $errorlog = "/srv/logs/transferlog.txt";
open(LOG, ">$errorlog") or die("Unable to open $errorlog: $!\n");
print LOG "Errors:\n";
carpout(*LOG);
}
# create backup subfolder
my @dt = localtime;
my $subfolder_name = ((((1900 + $dt[5]) * 100 + 1 + $dt[4]) * 100 + $d
+t[3]) * 100 + $dt[2]) * 100 + $dt[1];
mkdir "/srv/OUT/$subfolder_name" or die "$subfolder_name: $!";
foreach my $file (</srv/*.txt>) {
# sftp transfer
my $sftp=Net::SFTP->new($server, %args) or die "could not open
+ connection to $server\n";
# change remote directory for the first file
# $sftp->cd($remote_directory);
# $sftp->binary;
$sftp->put($file, $file) or die "could not upload a file\n";
#quit SFTP
#$sftp->quit;
# move to the backup directory
unless(move("$file", "/srv/OUT/$subfolder_name"))
{
print STDERR "Oops! Couldn't move the file: $!";
}
move "/srv/logs/transferlog.txt", "/srv/OUT/$subfolder_name";
sleep (1 * 5)
}
# send the mail, when transfer completed
my $sender = new Mail::Sender
{smtp => 'localhost', from => $linux};
$sender->MailFile({to => "$recipient1, $recipient2, $recipient3",
subject => 'data transfer',
msg => 'data transfer should be completed',
file => "/srv/OUT/$subfolder_name/transferlog.txt"});
exit;
but the *.txt file is not transfered and I'm getting this problem:
linux: Next method to try is publickey.
Permission denied at /usr/local/share/perl/5.10.0/Net/SFTP.pm line 62
I have permission to this server and to transfer manually works well.
What's wrong and howto solve this problem?
THX