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

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.

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

    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.

      I checked, the permissions on the local and remote machine are OK.
      Still cannot understand why this simple script:
      cc:/sftp/test# # cat test_sftp.cgi #!/usr/bin/perl -w use strict; use warnings; use Net::SFTP; my $file = 'TEST.txt'; my $server = 'X.X.X.X'; my $user = 'user'; my $sftp; my %args = ( ssh_args => { user => 'user', identity_files => [ '/root/.ssh/id_r +sa' ], debug => 1 } ); $sftp = Net::SFTP->new($server, %args) or die "could not open connection to $server\n"; $sftp->put($file, $file) or die "could not upload $file\n"; exit;
      cc:/sftp/test# perl test_sftp.cgi 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. .inux.ch.bluee.net: 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 '/root/.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
      works and send a file without any problems, but if change this script to:
      my $file = '/sftp/test/TEST.txt';
      then cannot send due to the following problem:
      ............................................................... ............................................................... ............................................................... cc: Sending subsystem: sftp cc: Requesting service subsystem on channel 1. cc: channel 1: open confirm rwindow 100000 rmax 16384 Couldn't get handle: Permission denied at test_sftp.cgi line 21 could not upload /sftp/test/TEST.txt
      In both cases the file is in the same directory where the script is and the path is 100% correct.
      There is no permission problem, the script cannot handle path.

      greetings
      chris

        You are using the same path on both systems. It might help you isolate the problem if you changed the path for one end at a time.

        # cat test_sftp.cgi #!/usr/bin/perl -w use strict; use warnings; use Net::SFTP; my $from = 'TEST.txt'; my $to = '/sftp/tmp/TEST.txt'; my $server = 'X.X.X.X'; my $user = 'user'; my $sftp; my %args = ( ssh_args => { user => 'user', identity_files => [ '/root/.ssh/id_r +sa' ], debug => 1 } ); $sftp = Net::SFTP->new($server, %args) or die "could not open connection to $server\n"; $sftp->put($from, $to) or die "could not upload $file\n"; exit;

        Are you running a system with Security Enhanced (SE) Linux (e.g. RedHat)? If so, there may be restrictions on your /sftp directory and/or ssh processes preventing access. If SELinux is preventing access it will probably be logging the faults. Check /var/log/messages (probably).