On Fri, Jul 9, 2010 at 10:42 AM, mtice <mjt...@gmail.com> wrote: > Hello, I'm trying to perform an ls() on a remote nested directory using > the Net::SFTP module. It's throwing back a strange error. If I do an ls() > at the root dir everything comes back fine - it's just the nested dir that > has an issue. > > Here is my code: > > #!/usr/bin/perl > > use Net::SFTP; > use GnuPG qw( :algo ); > use File::Copy; > > my $gpg_homedir = "/home/fnbosftp/.gnupg"; > my $host = `/etc/db_auth fnbo hostname`; > chomp($host); > our $dropoff = "/home/fnbosftp/dropoff"; > my $shred = "/usr/bin/shred -u"; > my $backup_dir = "/home/fnbosftp/backup"; > our $log_file = "/var/log/fnbo.log"; > my $application = "ApplicationJava"; > my $pickup_dir = 'out/03050'; > > # First, get the files > get_files($pickup_dir,$host); > > sub get_files > { > my ($pickup_dir,$host) = @_; > my $username = `/etc/db_auth fnbo username`; > my $password = `/etc/db_auth fnbo password`; > chomp($host,$username,$password); > > my %ssh_args = (user => "$username", password => "$password", debug > => "1", ssh_args => [protocol => 2]); > my $sftp = Net::SFTP->new($host, %ssh_args) or logger("Unable to > connect to $host: $!"); > my $status = $sftp->status; > > $sftp->ls($pickup_dir,sub { print $_[0]->{filename}, "\n" }); > > } > > sub logger > { > my $message = shift; > > open(FH,">>","$log_file") or die "Unable to open log file: $!\n"; > print FH localtime(). " $message\n"; > close(FH); > } > > So if I set $pickup_dir = "." everything returns as expected. Here is the > debug output: > > sftp01: Reading configuration data /root/.ssh/config > sftp01: Reading configuration data /etc/ssh_config > sftp01: Allocated local port 1023. > sftp01: Connecting to sftp.1st.com, port 22. > sftp01: Remote protocol version 2.0, remote software version 0 > sftp01: Net::SSH::Perl Version 1.34, protocol version 2.0. > .sftp01.overstock.com: No compat match: 0 > sftp01: Connection established. > sftp01: Sent key-exchange init (KEXINIT), wait response. > sftp01: Algorithms, c->s: 3des-cbc hmac-sha1 none > sftp01: Algorithms, s->c: 3des-cbc hmac-sha1 none > sftp01: Entering Diffie-Hellman Group 1 key exchange. > sftp01: Sent DH public key, waiting for reply. > sftp01: Received host key, type 'ssh-dss'. > sftp01: Host 'sftp.1stsignal.com' is known and matches the host key. > sftp01: Computing shared secret key. > sftp01: Verifying server signature. > sftp01: Waiting for NEWKEYS message. > sftp01: Send NEWKEYS. > sftp01: Enabling encryption/MAC/compression. > sftp01: Sending request for user-authentication service. > sftp01: Service accepted: ssh-userauth. > sftp01: Trying empty user-authentication request. > sftp01: Authentication methods that can continue: publickey,password. > sftp01: Next method to try is publickey. > sftp01: Next method to try is password. > sftp01: Trying password authentication. > sftp01: Login completed, opening dummy shell channel. > sftp01: channel 0: new [client-session] > sftp01: Requesting channel_open for channel 0. > sftp01: channel 0: open confirm rwindow 300000 rmax 30000 > sftp01: channel 1: new [client-session] > sftp01: Requesting channel_open for channel 1. > sftp01: Sending subsystem: sftp > sftp01: Requesting service subsystem on channel 1. > sftp01: channel 1: open confirm rwindow 300000 rmax 30000 > sftp01: sftp: Sending SSH2_FXP_INIT > sftp01: sftp: Remote version: 3 > sftp01: sftp: Sent message T:11 I:0 > Couldn't get handle: Failure at ./sftp_get.pl line 47 > > I thought maybe I had to open the dir first so I tried putting this line in > before the ls(): > > $sftp->do_opendir("$pickup_dir"); > > But I get a 'Couldn't get handle . . .' error on that line, too. > > I've searched through the archives but there weren't very many responses to > similar problems. Any help would be appreciated. > > Matt >
Looks like the problem was on the windows wsftp server. There was a parent directory my script wasn't traversing (but when manually sftp-ing I didn't need to enter the directory). e.g. /<hidden dir>/out/03050/ When I updated my script to ls() that hidden dir everything worked as planned.