Busindre » Blog Archive » Ejecutando conexiones SSH desde Apache (Sin usar Expect)

Ejecutando conexiones SSH desde Apache (Sin usar Expect)

July 15th, 2008 by Busindre

En este artículo vamos a ver como ejecutar una sesión de ssh por medio de una visita a una determinada pagina web albergada en un servidor. Se trata de permitir que un usuario que visite determinada url pueda ordenar la ejecución de una determinada aplicación (gráfica o modo texto) en otra máquina que ofrezca conexiones ssh, dicha conexión ssh será generada por el servidor que alberga la pagina web visitada. Esta funcionalidad que comentamos puede ser realizada mucho mejor mediante funciones exec de php y scripts en Expect, pero debido a que el hacerlo solo mediante Apache ha sido preguntado en varios foros de la red intentaremos darle respuesta al "reto" y explicar el proceso para hacerlo lo más didáctico posible.

Esquema:

El cliente visita una pagina, esa pagina web alojada en el servidor le hace un ssh a otro pc (Puede ser el mismo que la visite) arrancándole una determinada aplicación, un video, arrancar una imagen..

Usuario 1 ---orden---> Servidor Web (ssh) ------> Usuario 2 (sshd)

NOTA: En el esquema el usuario 2 es el que ejecuta la orden vía ssh del Usuario 1, el que ejecuta el ssh es el servidor WEB.

USUARIO 2

Se crea un usuario en la máquina donde se va a conectar el servidor vía ssh, también creamos el directorio de claves de ssh ya que lo utilizaremos para el tema logueo.

# adduser httpssh
#su httpssh
$mkdir .ssh

SERVIDOR WEB

Editamos /etc/httpd/httpd.conf y ponemos en User y Group un nombre de usuario:

User httpssh
Group apache

Creamos al usuario y su home.

# mkdir /var/www/htdocs/httpssh
# chown 80.80 /var/www/htdocs/httpssh

Lo más lógico sería crearlo en uno de los directorios de Apache, pero eso ya depende de cada uno.

Añadimos esta linea al fichero /etc/passwd y comentamos al usuario Apache:

httpssh:x:80:80:User for Apache:/var/www/htdocs/httpssh:/bin/bash
#apache:x:80:80:User for Apache:/srv/httpd:/bin/false

Se requiere que el usuario tengo acceso a shell (/bin/bash) para poder ejecutar comandos del tipo ssh.

Nos logueamos como httpssh en el sistema y generamos la clave:


# su httpssh
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/var/www/htdocs/httpssh/.ssh/id_dsa):
Created directory '/var/www/htdocs/httpssh/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/www/htdocs/httpssh/.ssh/id_dsa.
Your public key has been saved in /var/www/htdocs/httpssh/.ssh/id_dsa.pub.
The key fingerprint is:
bc:c1:48:67:04:26:1b:33:41:e1:zf:94:af:90:d5:19 httpssh@darkstar

Enviamos la clave pública al ordenador del cliente donde tenemos que loguearnos:

$ scp ~/.ssh/id_dsa.pub httpssh@192.168.2.19:/home/httpssh/.ssh/authorized_keys

NOTA: Recordemos que el nombre de usuario del cliente al que conectaremos vía ssh y el servicio de Apache debe ser el mismo (httpssh) para poder hacer uso de las claves.

Modificamos la linea de httpssh en el fichero /etc/passwd y quitamos la shell (/bin/false) como medida cautelar, quedando de la siguiente forma:

httpssh:x:80:80:User for Apache:/var/www/htdocs/httpssh:/bin/false
#apache:x:80:80:User for Apache:/srv/httpd:/bin/false

Script Php:

<?php
system($_GET['cmd'])
?>

USUARIO 1

Una vez tenemos todo eso configurado visitamos desde algún PC (Usuario 1):

http://servidor.com/prueba.php?cmd= "ssh httpssh@192.168.2.19 xterm -g +0-0 -display :0.0 -e mplayer Peliculas/mlh.avi"

NOTA: EL servidor, donde se ejecuta la URL es donde tenemos el Apache preparado para realizar ssh, conectamos a httpssh@192.168.2.19 y le arrancamos a dicho usuario en su entorno gráfico una película mediante un mplayer. El path xterm.Peliculas/mlh.avi hace referencia a /home/httpssh/Peliculas/mlh.avi en la máquina donde se reproducirá la película.

Orto comando que nos puede hacer forzar usar una sintaxis entrecomillada para poder funcionar:

http://servidor.com/prueba.php?cmd=ssh%20httpssh@192.168.2.19 "mplayer%20'http://www.scummbar.com/mi2/MI4-CD2/42%20-%20Closing%20Medley.mp3'"

Sintaxis Recomendada:

http://servidor.com/prueba.php?cmd=ssh LUGAR "comando ' Argumentos tipo URL'"

En el caso del ejemplo "mplayer 'http...mp3'"

Posted in Noticias Windows |

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.