Hay un servidor al que puedo acceder mediante SSH, pero no puedo utilizar mucho espacio en el disco duro. Quiero ejecutar un programa, pero este programa es bastante grande, por lo que no puedo simplemente copiarlo al servidor. ¿Existe alguna forma de ejecutar un programa ubicado en mi computadora en el servidor a través de SSH?
(tanto mi computadora como el servidor están en la misma LAN, estoy ejecutando Linux Mint y el servidor ejecuta CentOS versión 5.9 (Final)).
Respuesta1
Para que el servidor ejecute un binario ELF (como el intérprete de Python) en uno de sus procesos, debe poder mapearlo en la memoria. Sólo puede hacerlo si el archivo está en el sistema de archivos virtual y si el sistema de archivos que lo sirve lo admite.
Por lo tanto, debe copiar ese python
ejecutable (y sus dependencias) en el servidor en uno de los sistemas de archivos montados al que tiene acceso de escritura o montar un sistema de archivos de su máquina Mint en el servidor a través de algún tipo de sistema de archivos de red como sshfs. nfs o cif.
Para montar un sistema de archivos, necesita privilegios de superusuario o al menos se le deben otorgar algunos de esos privilegios (a través de algún ejecutable suid como fusermount
). El administrador de ese servidor solo otorgaría ese privilegio a usuarios confiables, ya que es lo suficientemente poderoso como para abusar de él y obtener más privilegios.
Si no puede montar sistemas de archivos, otra opción sería ejecutar el software en un sistema operativo emulado como usar qemu
. Sin embargo, la pregunta que haría primero es: ¿por qué es necesario ejecutar eso en el servidor? ¿A qué recurso del servidor debe tener acceso ese programa? ¿No podría exponer esos recursos a su máquina de menta y ejecutar el software allí? También tendría que hacer algo así si el programa se ejecutara en una máquina virtual en el servidor.
Para iniciar una máquina virtual qemu en el servidor como una copia de su máquina mint, asumiendo que está usando LVM en la máquina mint y que solo hay un sistema de archivos (el sistema de archivos raíz) /dev/mint_VG/root
, puede hacer:
Tome una instantánea de LVM
/dev/mint_VG/root
que se convertirá en el sistema de archivos raíz de la VM en el servidor:sudo lvcreate -s -L10G -n root_vm_on_server mint_VG/root
Exportarlo como un dispositivo de bloqueo de red:
sudo nbd-server -C /dev/null 12345 /dev/mint_VG/root_vm_on_server
transfiera su kernel e imágenes initrd al servidor:
scp /boot/{vmlinux,initrd.img}-"$(uname -r)" server:
En el servidor, ejecute
qemu
como (tal vez enscreen
otmux
):qemu -drive file=nbd:mint-machine:12345,if=virtio -m 4096 \ -kernel vmlinuz-xxx -initrd initrd.img-xxx \ -append 'root=/dev/vda ro init=/bin/bash' -monitor stdio -vnc :4 \ -smp 8,core=8
(aquí se ejecuta con 8 CPU virtuales y 4 GB o RAM, y para empezar simplemente se ejecuta bash
en la VM).
Obtenga la consola gráfica con un visor VNC server-machine:4
, o puede usar una consola serie si no necesita gráficos.
Si puede convencer al administrador del sistema en el servidor para que le permita usar kvm
(le dé acceso de escritura /dev/kvm
), eso lo hará mucho más eficiente.
Respuesta2
Hasta donde yo sé, no se puede hacer sin acceso Root :(
RAZONAMIENTO: SEGURIDAD: ¿Cuál sería la diferencia entre que el programa se ejecute localmente en el servidor o que otra computadora ejecute un software ubicado en su computadora hacia un servidor?
Si esto se pudiera hacer, sería una botnet.
Dado que estoy OBTENIENDO una votación negativa: (Es muy frustrante lo rápido que sucede esto) Quiere que un programa en su computadora LinuxMint se ejecute en un servidor SIN que él instale el programa en el SERVIDOR. ¿Cómo puedo ejecutar mis programas en mi computadora local en otros servidores con acceso exclusivo de usuarios?