in reply to 'tcgetattr: No such device or address' on SSH using Expect.pm

First thing, you can use the <code> tag to format your code for easier reading, and it also seems like you're not using 'use strict' and 'use warnings'. I highly recommend both.

That being said, I'd also recommend looking into the Net::SSH::Expect module. It (to me) seems easier to use than the vanilla Expect.pm. Below is a snippet of code that I've used with it:

my $ssh = Net::SSH::Expect->new ( host => "$serverlist[$host]", user => "$user", raw_pty => 1, restart_timeout_upon_receive => 1, timeout => 6, ssh_option => " -x", );
It makes for pretty easy communication with the remote server, with several functions to send and receive data. You can receive for X seconds, read one line at a time, etc.

According to the documentation on CPAN, you can use it with or without password authentication. In my environment, I have ssh keys distributed, so I've not used the password version, but the docs say it's available.

Replies are listed 'Best First'.
Re^2: 'tcgetattr: No such device or address' on SSH using Expect.pm
by Anonymous Monk on Jun 03, 2010 at 04:58 UTC
    The application is built with perl 5.005, not able to get Net::Perl::SSH or Net::Perl::Expect compatible to this version of perl & have limitation in upgrading the perl version, hence used the existing perl module Expect.pm
      You can always install a private copy of a modern perl, one that isn't 12 decades old
        You can always install a private copy of a modern perl, one that isn't 12 decades old

        I agree. If this is a business/corporate environment, you should probably start a push to upgrade perl. I'm sure there are numerous bug fixes, reliability increases, performance enhancements, not to mention the added functionality of being able to use CPAN modules. Plus, its free! (Managers usually like that!)

        Of course before you go through that, make sure that any existing perl code will work in the new version, especially if its production-quality code. If you have a test/development environment, try it there first, etc.

        Hope that helps.