Why not use Net :: OpenSSH? This is a simple ssh script shell, I wrote some time ago:
#!/usr/bin/perl #Simple SSH Remote Executor using Net::OpenSSH Library use warnings; use strict; use Net::OpenSSH; # see http://search.cpan.org/~salva/Net-OpenSSH-0.62/lib/Net/OpenSSH.pm#DEBUGGING $Net::OpenSSH::debug = undef; use Getopt::Long; my $timeout = 10; my ($username,$identity,$hostname,$command) = undef; my $uid=getpwuid($<); my $ctl_dir=qq{/tmp/.libnet-puppet-$uid}; my $ctl_mode=0700; if ( ! -d $ctl_dir ) { mkdir( $ctl_dir,$ctl_mode ) }; open my $stderr_fh, '>>', '/dev/null' or die $!; sub print_help{ print qq{\nusage: $0 [options] -h Hostname -u username -i identity -c command long options are supported ! }; exit (1); } GetOptions ("hostname=s" => \$hostname, # string "username=s" => \$username, # string "identity=s" => \$identity, # string "command=s" => \$command) # string or print_help; if ( not defined $username or not defined $identity or not defined $hostname or not defined $command ) { print_help }; my $port = q{22}; my $user = $username; my $ssh; my $cmd = qq{$command}; my $options = { host => $hostname, user => $user, port => $port, default_stderr_fh => $stderr_fh, ctl_dir => $ctl_dir, master_opts => [ -o => "UserKnownHostsFile=/dev/null", -o => "StrictHostKeyChecking=no", -o => qq{IdentityFile=$identity}, ], timeout => $timeout }; #ALARM Timer timeout handling $SIG{ALRM} = sub { printf( "%s\n", qq{invalid-timeout-connecting-to-node-$hostname}); exit(1); }; #init alarm timer ;-) alarm( $timeout ); $ssh = Net::OpenSSH->new( %{$options} ) or $ssh->error and die "Couldn't establish SSH connection: ". $ssh->error; my (@out, $err) = $ssh->capture2({ timeout => 10 }, $cmd); die("Error: %s\n", $err) if defined $err; if ( (scalar(@out)) eq 0 ) { printf( "%s\n", qq{invalid-empty-string-received-by-node-$hostname}); exit(1); } foreach my $line ( @out ) { $line =~ s/^\s{1,}//; printf ("%s",$line); }
Install it using cpanm (cpanm Net :: OpenSSH) or as the debian package "libnet-openssh-perl".
See "Man ssh_config" for basic options available.
I think the script will be very useful. Rgds. Franz
source share