Please bottom post....

> Hi James,
> 
> Thanks for the pointer to the Expect module.
> 
> I'll set it up and hope I get it working...else I'll come running back to
> you :p
> 
> Can I establish an SSH connection and do something like Sshexec and Scp
> tasks do in ant 1.6.x using Expect ?
> 
> Thanks
> -aman
> 

You could, but in the case of SSH you would be better off using
Net::SSH::Perl or Net::SFTP.  Expect should be an absolute last resort,
screen scraping is fine when there is no other published interface, in
the case of SSH that isn't the case.

http://danconia.org

> -----Original Message-----
> From: Kipp, James [mailto:[EMAIL PROTECTED] 
> Sent: 17 February 2004 19:35
> To: 'Thind, Aman'; Perl Beginners
> Subject: RE: How to su in a script if su needs a pswd ?
> 
> 
> > Hello,
> > 
> > I am running a command as part of my script on a Unix box for 
> > which I need
> > to su to a different username.
> > 
> > This su requires a password as well.
> > 
> > I could not find any option of passing the password in su.
> > 
> > Tried the shell script solution of here docs :
> > 
> > su <<TillEnd
> > admin
> > test
> > TillEnd
> > 
> 
> Take a look at the Expect module. Here is some code from a script i did a
> long time ago. It was a wrapper script for su. It may help:
> --
> use strict;
> use Expect;
> use IO:Socket;
> 
> # grab the user if entered
> my $user = $ARGV[0] if $ARGV[0];
> my $pw;
> 
> #  might fail if it's su -
> if ($user && $user !~ /root/) {
>       real_su();
> }
> # &real_su unless $user =~ /root/;
> 
> print "Password: ";
> $pw = <STDIN>;
> chomp $pw;
> 
> # send the captured password to be cyphered 
> cypher($pw);
> 
> # tunnel($string);
> 
> # now that we cypher and sent the pw to us go ahead and run the
> 
> &real_su();
> 
> 
> sub real_su 
> {
>       
>       my $su = Expect->spawn('/bin/su',$user) or die "Can't start Program:
> $!\n";
>     # stop the output from going to STDOUT 
>     $su->log_stdout(0);
>     # capture pw and die with appropriate string if pw is wrong
>       my $error = ($su->expect(10, 'password:'))[1];      
>       if ($error) 
>       {
>               print $su "Sorry.\r"; 
>               print STDOUT "Sorry.\r";
>               $su->soft_close();
>       }
>         print $su "$pw\r";
>       $su->soft_close();
>       exit 0;
> }
> 
> .......
> 
> 
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
> 
> 
> 



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to