From 2d294f8309b99f02d895b2110c73f1295dab9138 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 21 Sep 1998 23:58:53 +0000 Subject: [PATCH] Initial revision --- site_perl/SSH.pm | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 site_perl/SSH.pm 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(); + $x =~ /^y/i; +} + +=head1 BUGS + +Not OO. + +scp stuff should transparantly use rsync-over-ssh instead. + +=head1 SEE ALSO + +L, L, L, L + +=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; + -- 2.11.0