X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=SSH.pm;h=990fa20a6c15966894c47208054b902bf782e675;hb=a9031ec538ba9b68d1bd9f4538e39b196c05def2;hp=3e21be5455585e89779889ae6cb12bb906287edf;hpb=1a7a6ee0eed956c70e77a9246da488ca66341591;p=Net-SSH.git diff --git a/SSH.pm b/SSH.pm index 3e21be5..990fa20 100644 --- a/SSH.pm +++ b/SSH.pm @@ -1,14 +1,17 @@ package Net::SSH; use strict; -use vars qw($VERSION @ISA @EXPORT_OK $ssh); +use vars qw($VERSION @ISA @EXPORT_OK $ssh $DEBUG); use Exporter; +use IO::File; use IPC::Open2; use IPC::Open3; @ISA = qw(Exporter); -@EXPORT_OK = qw( ssh issh sshopen2 sshopen3 ); -$VERSION = '0.02'; +@EXPORT_OK = qw( ssh issh ssh_cmd sshopen2 sshopen3 ); +$VERSION = '0.04'; + +$DEBUG = 0; $ssh = "ssh"; @@ -24,6 +27,8 @@ Net::SSH - Perl extension for secure shell issh('user@hostname', $command); + ssh_cmd('user@hostname', $command); + sshopen2('user@hostname', $reader, $writer, $command); sshopen3('user@hostname', $writer, $reader, $error, $command); @@ -44,7 +49,9 @@ Calls ssh in batch mode. sub ssh { my($host, @command) = @_; - my @cmd = ($ssh, '-o', 'BatchMode yes', $host, @command); + my @cmd = ($ssh, '-o', 'BatchMode=yes', $host, @command); + warn "[Net::SSH::ssh] executing ". join(' ', @cmd). "\n" + if $DEBUG; system(@cmd); } @@ -64,6 +71,34 @@ sub issh { } } +=item ssh_cmd [USER@]HOST, COMMAND [, ARGS ... ] + +Calls ssh in batch mode. Dies if data occurs on the error stream. Warns +of data on the output stream. + +=cut + +sub ssh_cmd { + my($host, @command) = @_; + + my $reader = IO::File->new(); + my $writer = IO::File->new(); + my $error = IO::File->new(); + + sshopen3( $host, $reader, $writer, $error, @command ) or die $!; + + local $/ = undef; + my $output_stream = <$writer>; + my $error_stream = <$error>; + if ( length $error_stream ) { + die "[Net:SSH::ssh_cmd] STDERR $error_stream"; + } + if ( length $output_stream ) { + warn "[Net::SSH::ssh_cmd] STDOUT $output_stream"; + } + +} + =item sshopen2 [USER@]HOST, READER, WRITER, COMMAND [, ARGS ... ] Connects the supplied filehandles to the ssh process (in batch mode). @@ -72,7 +107,7 @@ Connects the supplied filehandles to the ssh process (in batch mode). sub sshopen2 { my($host, $reader, $writer, @command) = @_; - open2($reader, $writer, $ssh, '-o', 'Batchmode yes', $host, @command); + open2($reader, $writer, $ssh, '-o', 'BatchMode=yes', $host, @command); } =item sshopen3 HOST, WRITER, READER, ERROR, COMMAND [, ARGS ... ] @@ -83,7 +118,7 @@ Connects the supplied filehandles to the ssh process (in batch mode). sub sshopen3 { my($host, $writer, $reader, $error, @command) = @_; - open3($writer, $reader, $error, $ssh, '-o', 'Batchmode yes', $host, @command); + open3($writer, $reader, $error, $ssh, '-o', 'BatchMode=yes', $host, @command); } sub _yesno { @@ -133,6 +168,15 @@ Ivan Kohler John Harrison contributed an example for the documentation. +=head1 COPYRIGHT + +Copyright (c) 2000 Ivan Kohler. +Copyright (c) 2000 Silicon Interactive Software Design. +Copyright (c) 2000 Freeside Internet Services, LLC +All rights reserved. +This program is free software; you can redistribute it and/or modify it under +the same terms as Perl itself. + =head1 BUGS Not OO. @@ -141,7 +185,7 @@ Look at IPC::Session (also fsh) =head1 SEE ALSO -ssh-keygen(1), ssh(1), L, L +ssh-keygen(1), ssh(1), L, L, L =cut