package Net::SSH;
use strict;
-use vars qw($VERSION @ISA @EXPORT_OK $ssh $equalspace $DEBUG);
+use vars qw($VERSION @ISA @EXPORT_OK $ssh $equalspace $DEBUG @ssh_options);
use Exporter;
use IO::File;
use IPC::Open2;
@ISA = qw(Exporter);
@EXPORT_OK = qw( ssh issh ssh_cmd sshopen2 sshopen3 );
-$VERSION = '0.06';
+$VERSION = '0.07';
$DEBUG = 0;
sub ssh {
my($host, @command) = @_;
- &_check_ssh_version unless defined $equalspace;
- my @cmd = ($ssh, '-o', 'BatchMode'.$equalspace.'yes', $host, @command);
+ @ssh_options = &_ssh_options unless @ssh_options;
+ my @cmd = ($ssh, @ssh_options, $host, @command);
warn "[Net::SSH::ssh] executing ". join(' ', @cmd). "\n"
if $DEBUG;
system(@cmd);
sub sshopen2 {
my($host, $reader, $writer, @command) = @_;
- &_check_ssh_version unless defined $equalspace;
- open2($reader, $writer, $ssh, '-o', 'BatchMode'.$equalspace.'yes', $host, @command);
+ @ssh_options = &_ssh_options unless @ssh_options;
+ open2($reader, $writer, $ssh, @ssh_options, $host, @command);
}
=item sshopen3 HOST, WRITER, READER, ERROR, COMMAND [, ARGS ... ]
sub sshopen3 {
my($host, $writer, $reader, $error, @command) = @_;
- &_check_ssh_version unless defined $equalspace;
- open3($writer, $reader, $error, $ssh, '-o', 'BatchMode'.$equalspace.'yes', $host, @command);
+ @ssh_options = &_ssh_options unless @ssh_options;
+ open3($writer, $reader, $error, $ssh, @ssh_options, $host, @command);
}
sub _yesno {
$x =~ /^y/i;
}
-sub _check_ssh_version {
+sub _ssh_options {
my $reader = IO::File->new();
my $writer = IO::File->new();
my $error = IO::File->new();
} else {
$equalspace = "=";
}
+ my @options = ( '-o', 'BatchMode'.$equalspace.'yes' )
+ if ( $ssh_version =~ /.*OpenSSH[-|_](\w+)\./ && $1 > 1 ) {
+ unshift @options, '-T';
+ }
+ @options;
}
=back