in reply to Re^3: transfer a file via SFTP
in thread transfer a file via SFTP

THX, I changed the script and now RSA authentication works, but the *.txt file won't be transfered.
#!/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 $file = '/srv/*.txt'; my $server = 'X.X.X.X'; my $user = 'myuser'; my $sftp; my %args = ( ssh_args => { user => 'myuser', identity_files => [ '/home/.ssh/id_r +sa' ], protocol => '2,1', debug => 1, } ); my $linux = "admin\@domain.net"; my $recipient1 = "recipient1\@domain.net"; my $recipient2 = "recipient2\@domain.net"; my $recipient3 = "recipient3\@domain.net>"; # write a 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 file transfer $sftp = Net::SFTP->new($server, %args) or die "could not open connecti +on to $server\n"; $sftp->put($file, $file) or die "could not upload $file\n"; # move files 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 a mail if 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;

I'm getting these messages:
cc: Reading configuration data /root/.ssh/config cc: Reading configuration data /etc/ssh_config cc: Allocated local port 1023. cc: Connecting to X.X.X.X, port 22. cc: Remote protocol version 2.0, remote software version 4.0.7.1 SSH S +ecure Shell Windows NT Server cc: Net::SSH::Perl Version 1.34, protocol version 2.0. cc: No compat match: 4.0.7.1 SSH Secure Shell Windows NT Server . cc: Connection established. cc: Sent key-exchange init (KEXINIT), wait response. cc: Algorithms, c->s: 3des-cbc hmac-sha1 none cc: Algorithms, s->c: 3des-cbc hmac-sha1 none cc: Entering Diffie-Hellman Group 1 key exchange. cc: Sent DH public key, waiting for reply. cc: Received host key, type 'ssh-dss'. cc: Host 'X.X.X.X' is known and matches the host key. cc: Computing shared secret key. cc: Verifying server signature. cc: Waiting for NEWKEYS message. cc: Send NEWKEYS. cc: Enabling encryption/MAC/compression. cc: Sending request for user-authentication service. cc: Service accepted: ssh-userauth. cc: Trying empty user-authentication request. cc: Authentication methods that can continue: gssapi,publickey,passwor +d. cc: Next method to try is publickey. cc: Trying pubkey authentication with key file '/home/.ssh/id_rsa' cc: Login completed, opening dummy shell channel. cc: channel 0: new [client-session] cc: Requesting channel_open for channel 0. cc: channel 0: open confirm rwindow 100000 rmax 16384 cc: channel 1: new [client-session] cc: Requesting channel_open for channel 1. cc: Sending subsystem: sftp cc: Requesting service subsystem on channel 1. cc: channel 1: open confirm rwindow 100000 rmax 16384 [Fri Jul 24 19:26:15 2009] cc.cgi: Couldn't get handle: Permission den +ied at cc.cgi line 59 [Fri Jul 24 19:26:15 2009] cc.cgi: could not upload /srv/TEST.txt

Howto solve this problem?

Replies are listed 'Best First'.
Re^5: transfer a file via SFTP
by ig (Vicar) on Jul 24, 2009 at 21:49 UTC

    The usual cause of this error is that the user you are authenticated as does not have permission to write the destination file on the remote server. Check the ownership and permissions of the destination file if it exists. Otherwise, check that the authenticated user has write permissions on the directory in which the destination file is to be created.

      This authenticated user has write permissions on the remote server.
      I can connet using sftp from the command line and write without problems.
      If I put the file to the same directory where the script is, then this script works well.
      Why this script cannot transfer any files from the differnt directories?
      I gave full permissions for this user to other directories, but it doesn't help.
      This is really strange.

        Strange indeed.

        Still, permissions is the likely problem. Many times I have checked and re-checked permissions, only to find that I have overlooked something when I look again. Check every directory in the full path.

        You say it works when the file is in the same directory as the script. Maybe the problem is on the source server where you are running the script, rather than on the remote server to which you are trying to write the script. Check the permissions on the local server also.