No se puede ejecutar scipt remoto de perl script CGI

He creado un progtwig usando perl CGI donde estoy llamando a mi script de server que está en la location remota. Por eso he utilizado OpenSSH. Pero cuando ejecuto este script desde mi terminal funciona bien mi script de máquina remota también se ejecuta correctamente. Pero cuando lo hago desde el browser no funciona. He utilizado el guión siguiente.

#!/usr/bin/perl use warnings; use strict; use CGI; use Net::OpenSSH; use warnings; our $cgi = new CGI; use Net::OpenSSH; my %opts = ( user => "UNAME", #password => "MYPASSWORD", strict_mode => 0, ); my $ssh = Net::OpenSSH->new("MY SERVER_IP",%opts,master_opts => [-i => "MY KEY FILE"], async => 1); $ssh->system("/root/test.sh") or die "remote command failed: " . $ssh->error; 

A continuación se muestran los loggings de los loggings de errores de apache

[Fri Jun 27 12:11:57 2014] [error] [cliente localhost] Permiso denegado (publickey, gssapi-keyex, gssapi-con-mic). Referencia: http: // XXXX / cgi-bin1 / test .cgi

Los scripts CGI se ejecutan generalmente como el mismo usuario que el server web que se ejecuta bajo – a menudo el nombre de usuario wwwdata , o www . Dado que su file key está restringido a su propio nombre de usuario, huzefa , el server web no puede acceder a él.

Si permitiera que el usuario del server web usara su propia key ssh, entonces sería posible que alguien que encontró un agujero de security en su server web usara su key y luego ingrese a cualquier server al que tenga acceso con esa key. Probablemente no quieras esto.

Hay algunas maneras de evitar esto sin abrir un agujero de security enorme. Lo más fácil es simplemente configurar una key ssh separada para este uso en particular:

  1. Generar una nueva key ssh y colocarla en un directory al que el usuario del server web puede acceder
  2. Copie la parte pública de la key en el file authorized_keys del server.
  3. Edite el file authorized_keys para que la key pública utilizada por el server web sólo pueda utilizarse para ejecutar ese script. Para get una security adicional, limite a que sólo permita conexiones desde la dirección IP de su server. Debe ser algo como esto:
 desde = "10.1.2.3", sin reenvío de puertos, reenvío de no-X11, reenvío sin agente, no-pty, command = "/ root / test.sh" ssh-dss AA ..... 

El process del server Web es propiedad del usuario de apache no como root .

  1. Asegúrese de que el usuario de apache tiene less acceso a la contraseña de otro server

  2. SELinux debe estar deshabilitado

Refer: http://wccandlinux.blogspot.in/2016/07/how-to-run-ssh-command-from-apache.html