¿Cómo ejecutar una aplicación local en un servidor distante con SSH?

¿Cómo ejecutar una aplicación local en un servidor distante con SSH?

Me gustaría saber si es posible ejecutar una aplicación local en un servidor distante utilizando el protocolo SSH.

Respuesta1

Para ejecutar aplicaciones instaladas localmente utilizando la CPU y la memoria de otra computadora, podría intentar esto, suponiendo que los procesadores sean compatibles. No estoy seguro de qué tan bien funcionará, pero la teoría parece sólida :) Probablemente necesitarás acceso de superusuario en el servidor remoto para que esto funcione.

  • ssh en el servidor distante

  • Monte el sistema de archivos raíz local en algún lugar. No deberías hacer esto en absoluto a menos que estés seguro de que puedes confiar en los administradores del sistema remoto.

    • Esto se puede hacer a través de sshfs siempre que pueda realizar ssh desde el servidor al sistema local. Creo que puedes arreglar esto reenviando un puerto a través de la conexión que hiciste cuando conectaste del local al servidor, pero yo no me he metido en tales travesuras.
      • Normalmente, si la máquina local está en una red doméstica, simplemente configurará el reenvío de puertos en su enrutador. Probablemente debería deshabilitar el inicio de sesión con contraseña en sshd_config de su sistema local antes de seguir esta ruta y generar una clave ssh con una frase de contraseña para su cuenta en el servidor, volviendo scpel id_?sa.pubarchivo a local para agregarlo a su archivo ~/.ssh/authorized_keys. Restringir las direcciones IP que pueden ingresar a su máquina es otra buena idea. Etcétera.
    • Si desea ejecutar cualquier cosa que deba ejecutarse como root, creo que necesitará configurar el montaje sshfs para que sea root en su sistema de archivos local. Eso significa que necesitarías permitir que las personas accedan a tu caja local como root, lo cual es otra medida de política dudosa. De hecho, no estoy seguro de esto, es posible que puedas hacer sudo dentro del shell chroot.
    • Podrías montarlo de otras maneras, por ejemplo a través de NFS, pero sshfs es probablemente el más fácil de proteger. Probablemente sería más prudente hacer todo esto a través de una VPN.
  • Una vez que haya montado el sistema de archivos y todavía esté conectado mediante ssh al servidor, haga

    chroot /ruta/al/montaje/de/local/sistema de archivos ARGUMENTOS DE COMANDO

O puede simplemente cdir al directorio y ejecutarlo chroot, y luego tendrá una especie de shell raíz en su propio sistema, y ​​el servidor realizará el procesamiento. El primer formulario tiene la ventaja de permitirle guardar cómodamente la salida en el sistema del servidor, ya que cualquier redireccionamiento se realizará en el servidor. P.EJ

chroot /path/to/mount/of/local/filesystem find -iname "somefile" > ~/tmp/somefile.find.out

guardará la lista de archivos llamados "algún archivo" en el directorio temporal de su hogar en elservidor.

advertencias

Esto es, al menos desde mi punto de vista, bastante experimental. No estoy seguro de qué podría salir mal, pero no lo intentaría a menos que algunas personas lo avalen. Incluso entonces no lo probaría en un sistema de producción. Si estuviera haciendo un programa de televisión de TI, este segmento estaría subtitulado con las palabras "NO INTENTES ESTO EN CASA".

Definitivamente necesitarás tener procesadores compatibles en las dos máquinas: si el sistema local es i386, el servidor tendrá que ser i386 o amd64. Además, dado que el kernel del servidor hará el trabajo, solo podrá ejecutar aplicaciones locales que funcionen con la versión del kernel que se ejecuta en el servidor. Probablemente sería mejor si fueran la misma versión. Entonces, si tanto su dispositivo local como el servidor remoto ejecutan Debian Squeeze de 32 bits, entonces esto podría funcionar sin problemas.

Como nota adicional: puede haber una ventaja muy limitada al hacer las cosas de esta manera, ya que cualquier dato que deba transferirse de un lado a otro (incluidos los archivos a procesar y las aplicaciones mismas) tendrá que cifrarse y transferirse a través de su control remoto. conexión. Entonces, si está buscando hacer esto para aprovechar la potencia de procesamiento superior del servidor, es posible que al final no gane mucho y que pierda algo.

Respuesta2

Eso depende mucho de cómo definas los términos que estás utilizando:

  • "Ejecutar una aplicación" normalmente significa "dejar que la CPU procese las instrucciones de un binario ("el .exe")".

  • "Localmente" normalmente significa "la CPU de la máquina frente a la cual estoy sentado está ejecutando el código".

  • ssh se utiliza para cifrar flujos de información.

Entonces, ¿qué será?

  • ¿Quiere ejecutar su aplicación local localmente (mediante su CPU) pero desea interactuar con ella desde el servidor? Sí, eso se puede hacer a través de ssh, busque 'túnel ssh'.

  • ¿Quiere que su aplicación local sea procesada por las CPU del servidor? Luego debe copiar su aplicación binaria/local en el servidor y luego iniciarla en el servidor. Podrías usar ssh para hacer la copia. Pero su 'aplicación local' ya no es tan local después de la copia.

No se puede ejecutar código en una CPU sin ponerlo a disposición de la CPU antes.

Respuesta3

Un pequeño script de shell para una ejecución rápida y sencilla de archivos binarios en sistemas remotos:

#!/bin/bash

SOURCE_BIN="/some/path/binary"
DEST_HOST="name-of-system"
DEST_BIN="/another/path/binary"

cat ${SOURCE_BIN} | \
ssh ${DEST_HOST} "cat >${DEST_BIN}; chmod +x ${DEST_BIN}; ${DEST_BIN} with args; rm ${DEST_BIN}"

Respuesta4

Puede desde una máquina (máquina A) solicitar que otra máquina (máquina B) ejecute un programa que ya está en la máquina B. ssh le permitiría hacerlo.

Y creo que desde la máquina A se puede acceder, digamos, a un archivo de instalación desde la máquina B y ejecutarlo en la máquina A, lo que transferiría el archivo a la RAM de la máquina A. Creo que el intercambio de archivos de Windows hace eso. (por cierto, eso no mueve ni copia el archivo, ningún archivo desaparece ni aparece en ninguna parte al hacerlo. Una mejor terminología podría ser que el archivo se copia en la RAM y se convierte en un proceso, esto sucede cada vez que se ejecuta un programa, incluso cuando local)

En teoría, supongo que una CPU e instrucciones geniales podrían leerse desde la RAM en otra computadora. También querrás hacerlo a través de una red. Tal vez la tecnología esté literalmente disponible, pero no sabría dónde ni qué.

información relacionada