diff options
| author | cvs2git <cvs2git> | 1998-09-21 23:58:54 +0000 | 
|---|---|---|
| committer | cvs2git <cvs2git> | 1998-09-21 23:58:54 +0000 | 
| commit | da59a3fa07a3f9be297609704b7dce4859d86e36 (patch) | |
| tree | 643710a052407f340cbd8e7552b115c678a725e0 | |
| parent | 94a9beb0b173a4188320faa3c69bb32e38a24220 (diff) | |
| parent | 2d294f8309b99f02d895b2110c73f1295dab9138 (diff) | |
This commit was manufactured by cvs2svn to create branch 'freeside_import'.
| -rw-r--r-- | site_perl/SSH.pm | 157 | 
1 files changed, 157 insertions, 0 deletions
| diff --git a/site_perl/SSH.pm b/site_perl/SSH.pm new file mode 100644 index 000000000..d5a0df654 --- /dev/null +++ b/site_perl/SSH.pm @@ -0,0 +1,157 @@ +package FS::SSH; + +use strict; +use vars qw(@ISA @EXPORT_OK $ssh $scp); +use Exporter; +use IPC::Open2; +use IPC::Open3; + +@ISA = qw(Exporter); +@EXPORT_OK = qw(ssh scp issh iscp sshopen2 sshopen3); + +$ssh="ssh"; +$scp="scp"; + +=head1 NAME + +FS::SSH - Subroutines to call ssh and scp + +=head1 SYNOPSIS + +  use FS::SSH qw(ssh scp issh iscp sshopen2 sshopen3); + +  ssh($host, $command); + +  issh($host, $command); + +  scp($source, $destination); + +  iscp($source, $destination); + +  sshopen2($host, $reader, $writer, $command); + +  sshopen3($host, $reader, $writer, $error, $command); + +=head1 DESCRIPTION + +  Simple wrappers around ssh and scp commands. + +=head1 SUBROUTINES + +=over 4 + +=item ssh HOST, COMMAND  + +Calls ssh in batch mode. + +=cut + +sub ssh { +  my($host,$command)=@_; +  my(@cmd)=($ssh, "-o", "BatchMode yes", $host, $command); +#  	print join(' ',@cmd),"\n"; +#0; +  system(@cmd); +} + +=item issh HOST, COMMAND + +Prints the ssh command to be executed, waits for the user to confirm, and +(optionally) executes the command. + +=cut + +sub issh { +  my($host,$command)=@_; +  my(@cmd)=($ssh, $host, $command); +  print join(' ',@cmd),"\n"; +  if ( &_yesno ) { +    	###print join(' ',@cmd),"\n"; +    system(@cmd); +  } +} + +=item scp SOURCE, DESTINATION + +Calls scp in batch mode. + +=cut + +sub scp { +  my($src,$dest)=@_; +  my(@cmd)=($scp,"-Bprq",$src,$dest); +#  	print join(' ',@cmd),"\n"; +#0; +  system(@cmd); +} + +=item iscp SOURCE, DESTINATION + +Prints the scp command to be executed, waits for the user to confirm, and +(optionally) executes the command. + +=cut + +sub iscp { +  my($src,$dest)=@_; +  my(@cmd)=($scp,"-pr",$src,$dest); +  print join(' ',@cmd),"\n"; +  if ( &_yesno ) { +    	###print join(' ',@cmd),"\n"; +    system(@cmd); +  } +} + +=item sshopen2 HOST, READER, WRITER, COMMAND + +Connects the supplied filehandles to the ssh process (in batch mode). + +=cut + +sub sshopen2 { +  my($host,$reader,$writer,$command)=@_; +  open2($reader,$writer,$ssh,'-o','Batchmode yes',$host,$command); +} + +=item sshopen3 HOST, WRITER, READER, ERROR, COMMAND + +Connects the supplied filehandles to the ssh process (in batch mode). + +=cut + +sub sshopen3 { +  my($host,$writer,$reader,$error,$command)=@_; +  open3($writer,$reader,$error,$ssh,'-o','Batchmode yes',$host,$command); +} + +sub _yesno { +  print "Proceed [y/N]:"; +  my($x)=scalar(<STDIN>); +  $x =~ /^y/i; +} + +=head1 BUGS + +Not OO. + +scp stuff should transparantly use rsync-over-ssh instead. + +=head1 SEE ALSO + +L<ssh>, L<scp>, L<IPC::Open2>, L<IPC::Open3> + +=head1 HISTORY + +ivan@voicenet.com 97-jul-17 + +added sshopen2 and sshopen3 ivan@sisd.com 98-mar-9 + +added iscp ivan@sisd.com 98-jul-25 +now iscp asks y/n, issh and took out path ivan@sisd.com 98-jul-30 + +pod ivan@sisd.com 98-sep-21 + +=cut + +1; + | 
