rastoboy has asked for the wisdom of the Perl Monks concerning the following question:
I have no doubt my lack of Linux knowledge is seriously hampering me in my attempts to automate checking for sudo access on remote machines--any help would be greatly appreciated!
Basically, the idea is that if I have the current user password, that is success, and if not I want to drop into interactive mode to set it correctly (I won't bore you with the grisly why's and wherefores)
I have a simple method that attempts to do this:
The above code gives me:sub checksudo { my ($ssh, $ip, $pass) = @_; #$ssh is the successfully created openssh +object, $pass is the user's sudo password my $system = $ssh->system ('sudo -K') or return "failed to sudo -K: $! +\n"; #ensure we are prompted for a password my ( $pty, $pid ) = $ssh->open2pty( "sudo -p 'configtest:' bash 2>&1") or return "failed to attempt sudo bash: $!\n"; my $expect = Expect->init($pty); #sleep 1; #$expect->send ($pass . "\n"); $expect->expect(2, [ qr/configtest:/ => sub { my $expect =shift; $expect->send($p +ass . "\n"); exp_continue;} ], [ qr/Sorry/ => sub { my $expect=shift; print "Failed\n"; e +xp_continue; } ], ); #$expect->interact(); return; }
If I comment out the first array ref in the $expect->expect() statement, I get:tcsetattr: Input/output error
However, if I remove the $expect->expect() statement entirely and uncomment the $expect->send() statement which just sends the password, I get successful sudo's on the remote machine. Likewise if I only have the $expect->interact() statement in place, that works just fine, too.tcsetattr: Input/output error channel 0: chan_read_failed for istate 1
I have to think I'm fundamentally misunderstanding something--any input would be greatly appreciated!
updateEven when things seem to go fine, it seems that I still get the I/O errors when I try to execute another remote ssh command. The command succeeds but when that error at the top. I can't seem in the docs for Net::OpenSSH how to kill a particular child connection, which I'm guessing is what I need to do?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Losing my mind with Net::OpenSSH and Expect
by salva (Canon) on Feb 28, 2011 at 08:55 UTC | |
by rastoboy (Monk) on Feb 28, 2011 at 23:54 UTC | |
by rastoboy (Monk) on Mar 01, 2011 at 00:58 UTC | |
by salva (Canon) on Mar 01, 2011 at 09:37 UTC | |
by rastoboy (Monk) on Mar 01, 2011 at 20:48 UTC | |
|