Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Ejecutar script por SSH desde PHP

Estas en el tema de Ejecutar script por SSH desde PHP en el foro de PHP en Foros del Web. Buenas, Estoy realizando un proyecto con varios lenguajes: PHP, batch y bash. Por un lado tengo el cliente "A", Windows, con un script en una ...
  #1 (permalink)  
Antiguo 17/06/2013, 13:38
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 10 meses
Puntos: 1
Exclamación Ejecutar script por SSH desde PHP

Buenas,

Estoy realizando un proyecto con varios lenguajes: PHP, batch y bash.
Por un lado tengo el cliente "A", Windows, con un script en una carpeta.
Por otro lado tengo un servidor web Debian que contiene la página en PHP.
Desde un cliente "B" quiero abrir la página, y pulsando un botón ejecutar un comando por SSH que, a su vez, se conecte con el cliente "A" y ejecute el script.

He encontrado algo como esto:

Código PHP:
<?php

function ejecutar() {
$conexion=ssh2_connect('10.40.64.100'2222);
ssh2_auth_password($conexion'usuariossh''ssh123');

$comando=ssh2_exec($conexion'C:\bat\scriptwindows\scriptwindows.bat');
}

echo 
'<input type="button" name="copiabroad" value="Ejecutar script" onClick="'.ejecutar().'">';

?>
Espero que alguien pueda ayudarme, se acerca la fecha de entregar el proyecto y sigo pegado con esto.

Un saludo!
  #2 (permalink)  
Antiguo 17/06/2013, 13:41
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Ejecutar script por SSH desde PHP

Por cierto, también leí por ahí que hacía falta el módulo "libssh2-php" para apache, así que también lo tengo instalado.
  #3 (permalink)  
Antiguo 17/06/2013, 14:21
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: Ejecutar script por SSH desde PHP

Buenas,

si he entendido bien lo que quieres hacer, estás intentando conectarte por SSH a Windows y ejecutar un .bat ¿es así?

¿Tienes un corriendo un servidor SSH en Windows? Porque, si no me equivoco, para hacer esto tenías que tener instalado Cygwin.

Revisa esto: http://www.openssh.com/

Saludos

Última edición por dvpareja; 17/06/2013 a las 14:23 Razón: Información adicional
  #4 (permalink)  
Antiguo 17/06/2013, 14:24
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Ejecutar script por SSH desde PHP

Sí, quiero hacer eso. Ya tengo un túnel SSH montado entre Linux y Windows y puedo acceder desde la shell de Linux a Windows perfectamente:

ssh -p 2222 [email protected]

Lo que no se es implementar esto al PHP.
  #5 (permalink)  
Antiguo 17/06/2013, 14:35
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: Ejecutar script por SSH desde PHP

La parte PHP está bien, es el onClick donde te equivocas. No puedes llamar a una función de PHP desde ahí.

Podrías llamar una función Ajax para ejecutar la página PHP que contiene el script.

Por ejemplo:

Código PHP:
Ver original
  1. <?php
  2. // www.misitio.com/scriptssh.php
  3.  
  4. $conexion=ssh2_connect('10.40.64.100', 2222);
  5. ssh2_auth_password($conexion, 'usuariossh', 'ssh123');
  6.  
  7. $comando=ssh2_exec($conexion, 'C:\bat\scriptwindows\scriptwindows.bat');
  8.  
  9. ?>
Código HTML:
Ver original
  1. <!-- www.misitio.com/index.html -->
  2.  
  3. <!-- ... -->
  4. <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
  5. function ejecutar(){
  6. $.ajax({
  7.      url: "scriptssh.php",
  8.      context: document.body
  9. }).done(function() {
  10.   $(this).addClass("done");
  11. });
  12. }
  13.  
  14.  
  15. <input type="button" name="copiabroad" value="Ejecutar script" onClick="ejecutar()">
  16.  
  17. <!-- ... -->

No lo he probado, cuéntame como te va
  #6 (permalink)  
Antiguo 17/06/2013, 14:44
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Ejecutar script por SSH desde PHP

Lo de llamar a la función es lo de menos, yo lo que quiero es que se haga efectiva la ejecución, que es de lo que no estoy muy seguro.

Gracias por responder tan pronto!
  #7 (permalink)  
Antiguo 17/06/2013, 14:52
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: Ejecutar script por SSH desde PHP

¿Has hecho alguna prueba? ¿Recibes algún error?

P.D. Me encanta el tema
  #8 (permalink)  
Antiguo 17/06/2013, 14:53
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Ejecutar script por SSH desde PHP

Pues sí. He dejado sólamente en la página la parte de la conexión, es decir, sin función ni botón, pero no hace nada, ni siquiera muestra error en el navegador (error de PHP).
  #9 (permalink)  
Antiguo 17/06/2013, 14:57
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: Ejecutar script por SSH desde PHP

Tienes que recoger los resultados de alguna forma.

¿has mirado en PHP.net? http://www.php.net/manual/en/ref.ssh2.php

¿Tienes acceso a los logs del servidor? También puedes poner al inicio del php

error_reporting(E_ALL);
  #10 (permalink)  
Antiguo 17/06/2013, 15:04
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Ejecutar script por SSH desde PHP

Sigue igual, sigue sin mostrarme nada.

Este es el código que estoy usando ahora en la página:

Código PHP:
<?php

error_reporting
(E_ALL);

$ip="10.40.64.100";
$conexion=ssh2_connect('$ip''2222');
$comando="mkdir C:\Users\pcpc\Desktop\probando";
ssh2_auth_password($conexion'userssh''userssh');

ssh2_exec($conexion$comandoFALSE);

?>
  #11 (permalink)  
Antiguo 17/06/2013, 15:28
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: Ejecutar script por SSH desde PHP

Prueba ese Script, a mi me ha funcionado de Linux a Linux y manejas los eventos
Código PHP:
Ver original
  1. <?php
  2.  
  3. if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
  4.  
  5. // log in at server on port 22
  6.  
  7. if(!($con = ssh2_connect("srv2", 22))){
  8.  
  9. echo "fail: unable to establish connection\n";
  10.  
  11. } else {
  12.  
  13. // try to authenticate with username root, password secretpassword
  14.  
  15. if(!ssh2_auth_password($con, "user", "pass")) {
  16.  
  17. echo "fail: unable to authenticate\n";
  18.  
  19. } else {
  20.  
  21. // allright, we're in!
  22.  
  23. echo "okay: logged in...\n";
  24.  
  25. // execute a command
  26.  
  27. if(!($stream = ssh2_exec($con, "ls -al" )) ){
  28.  
  29. echo "fail: unable to execute command\n";
  30.  
  31. } else{
  32.  
  33. // collect returning data from command
  34.  
  35. echo "Executed ls -la\n";
  36.  
  37. stream_set_blocking( $stream, true );
  38.  
  39. $data = "";
  40.  
  41. while( $buf = fread($stream,4096) ){
  42.  
  43. $data .= $buf;
  44.  
  45. echo "".$buf;
  46.  
  47. }
  48.  
  49. fclose($stream);
  50.  
  51. }
  52.  
  53. }
  54.  
  55. }
  56.  
  57. ?>
  #12 (permalink)  
Antiguo 17/06/2013, 15:36
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Ejecutar script por SSH desde PHP

Vale genial, me han venido de lujo los manejadores de errores. Pero me falla al ejecutar el comando. Eso sí, en vez de poner un 'ls -la' he puesto un 'dir' puesto que lo quiero ejecutar en Windows.
  #13 (permalink)  
Antiguo 17/06/2013, 15:40
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: Ejecutar script por SSH desde PHP

Ahora tendrás que mirar los permisos de ejecución del archivo, si puedes ejecutarlo por consola, deberías poder ejecutarlo por ssh2.
A mí me ha ido perfectamente. He creado un script bash que mandara un email y escribiera un archivo en la carpeta del user, y lo ha hecho todo.

Ya no puedo ayudarte más. No tengo ningún SSH instalado en Win.

Cuenta que tal te ha ido.

Saludos !!
  #14 (permalink)  
Antiguo 17/06/2013, 15:41
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Ejecutar script por SSH desde PHP

Vale genial, parece que ya se como va el tema, de todos modos no lo marco como solucionado porque no llegué a la finalidad de ejecutar el script. Pero por lo pronto logré ejecutar un dir.
La idea es que según tu script, y donde se escribe el comando (ls -la), para Windows hay que poner "cmd /C dir" por ejemeplo.

Sigo investigando, muchas gracias por la ayuda, comentaré cualquier resultado :)
  #15 (permalink)  
Antiguo 18/06/2013, 14:41
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Ejecutar script por SSH desde PHP

Pues al final lo logré con ese script, muchísimas gracias dvpareja. Dejo por aquí como lo hice por si a alguien le sirve de ayuda.

Código PHP:
        if(!($con ssh2_connect($ip2222))){
            echo
'No se puede conectar con la máquina '.$ip;
        } else {
            
//Autentificación
            
if(!ssh2_auth_password($con"userssh""userssh")) {
                echo
'Fallo de autentificación en la máquina '.$ip;
            } else {
                
//Ejecución del comando
                
if(!($stream ssh2_exec($con"cmd /C cd C:\bat\script && script.bat" )) ){
                    echo 
'Fallo de ejecución de comando en la máquina '.$ip;
                } else {
                    
//echo "Ejecutado comando 2";
                    
stream_set_blocking$streamtrue );
                    
$data "";
                    while( 
$buf fread($stream,4096) ){
                        
$data .= $buf;
                        echo 
"".$buf;                        
                    }
                    
fclose($stream);
                }
            }
         } 
Y de nuevo muchas gracias, marco el tema como solucionado.

Un saludo!
  #16 (permalink)  
Antiguo 18/06/2013, 15:02
Avatar de dvpareja  
Fecha de Ingreso: junio-2010
Ubicación: Vélez-Málaga
Mensajes: 126
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: Ejecutar script por SSH desde PHP

Muchas gracias a tí.

¿Podrías comentar, por encima, como has montado la primera parte? O sea, ¿cómo accedes por SSH a Windows?

Gracias

Etiquetas: ssh
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:59.