Como executar uma aplicação local em um servidor distante com SSH?

Como executar uma aplicação local em um servidor distante com SSH?

Gostaria de saber se é possível rodar uma aplicação local em um servidor distante utilizando o protocolo SSH?

Responder1

Para executar aplicativos instalados localmente usando CPU e memória de outro computador, você poderia - supondo que os processadores sejam compatíveis - tentar isto. Não tenho certeza de quão bem isso funcionará, mas a teoria parece sólida :) Você provavelmente precisará de acesso de superusuário no servidor remoto para que isso funcione.

  • ssh para o servidor distante

  • Monte o sistema de arquivos raiz local em algum lugar. Você não deve fazer isso a menos que tenha certeza de que pode confiar nos administradores do sistema remoto.

    • Isso pode ser feito via sshfs, desde que você possa fazer ssh do servidor para o sistema local. Eu acho que você pode configurar isso encaminhando uma porta de volta através da conexão que você fez ao conectar do local para o servidor, mas eu mesmo não participei dessas travessuras.
      • Normalmente, se a máquina local estiver em uma rede doméstica, você apenas configuraria o encaminhamento de porta no seu roteador. Você provavelmente deve desabilitar o login com senha no sshd_config do seu sistema local antes de seguir esse caminho e gerar uma chave ssh com senha para sua conta no servidor, scpenviando o id_?sa.pubarquivo de volta ao local para anexá-lo ao seu arquivo ~/.ssh/authorized_keys. Restringir os endereços IP que podem ser conectados à sua máquina é outra boa ideia. Et cetera.
    • Se você deseja executar qualquer coisa que precise ser executada como root, acho que você precisará configurar a montagem sshfs para ser root em seu sistema de arquivos local. Isso significa que você precisaria permitir que as pessoas acessassem sua caixa local como root, o que é outra medida política duvidosa. Na verdade, não tenho certeza sobre isso, você pode conseguir sudo dentro do shell chroot.
    • Você poderia montá-lo de outras maneiras, por exemplo, através do NFS, mas o sshfs é provavelmente o mais fácil de proteger. Fazer tudo isso por meio de uma VPN provavelmente seria mais sensato.
  • Depois de montar o sistema de arquivos e ainda estar conectado ao servidor com ssh, faça

    chroot /caminho/para/montagem/de/local/sistema de arquivos COMMAND ARGS

Ou você pode simplesmente cdacessar o diretório e executar chroot, e então você terá um shell root em seu próprio sistema, com o processamento sendo feito pelo servidor. O primeiro formulário tem a vantagem de permitir que você salve convenientemente a saída no sistema do servidor, já que qualquer redirecionamento será feito para o servidor. POR EXEMPLO

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

salvará a lista de arquivos chamados "somefile" em seu diretório temporário inicial noservidor.

ressalvas

Isso é, pelo menos do meu ponto de vista, bastante experimental. Não tenho certeza do que poderia dar errado, mas não tentaria, a menos que algumas pessoas atestem isso. Mesmo assim, eu não tentaria isso em um sistema de produção. Se eu estivesse fazendo um programa de TV de TI, esse segmento seria legendado com as palavras "NÃO TENTE ISTO EM CASA".

Definitivamente você precisará ter processadores compatíveis nas duas máquinas: se o sistema local for i386, o servidor terá que ser i386 ou amd64. Além disso, como o kernel do servidor fará o trabalho, você só poderá executar aplicativos locais que funcionem com a versão do kernel que está sendo executada no servidor. Provavelmente seria melhor se fossem da mesma versão. Portanto, se tanto a sua máquina local quanto o servidor remoto estiverem executando o Debian Squeeze de 32 bits, isso poderá funcionar sem problemas.

Como observação adicional: pode haver uma vantagem muito limitada em fazer as coisas dessa maneira, uma vez que quaisquer dados que precisem ser transferidos de um lado para o outro - incluindo os arquivos a serem processados ​​e os próprios aplicativos - terão que ser criptografados e transferidos pelo seu controle remoto. conexão. Portanto, se você deseja fazer isso para aproveitar o poder de processamento superior do servidor, poderá não ganhar muito no final e poderá perder algum.

Responder2

Isso depende muito de como você define os termos que está usando:

  • 'Executar um aplicativo' normalmente significa 'deixar a CPU processar as instruções de um binário ("o .exe")'.

  • 'Localmente' normalmente significa 'a CPU da máquina em que estou sentado está executando o código'

  • ssh é usado para criptografar fluxos de informações

Então, o que será?

  • Você deseja executar seu aplicativo local localmente (por sua CPU), mas deseja interagir com ele a partir do servidor? Sim, isso pode ser feito via ssh, procure por 'túnel ssh'.

  • Você deseja que seu aplicativo local seja processado pela(s) CPU(s) do servidor? Então você tem que copiar seu binário/aplicativo local para o servidor e então iniciá-lo no servidor. Você poderia usar ssh para fazer a cópia. Mas o seu 'aplicativo local' não é mais tão local após a cópia.

Você não pode executar código em uma CPU sem antes disponibilizá-lo para a CPU.

Responder3

Um pequeno script de shell para execução rápida e suja de binários em 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}"

Responder4

Você pode, de uma máquina (máquina A), solicitar que outra máquina (máquina B) execute um programa que já esteja na máquina B. ssh permitiria que você fizesse isso.

E eu acho que você pode acessar a partir da máquina A, digamos, um arquivo de instalação da máquina B e executá-lo na máquina A, o que transferiria o arquivo para a RAM da máquina A. Acho que o compartilhamento de arquivos do Windows faz isso. (a propósito, isso não move ou copia o arquivo, nenhum arquivo desaparece ou aparece em qualquer lugar ao fazer isso. Uma terminologia melhor seria que o arquivo é copiado para a RAM e se torna um processo, isso acontece sempre que um programa é executado, mesmo quando local)

Em teoria, suponho que uma CPU e instruções muito legais poderiam ser lidas na RAM de outro computador. Você também gostaria de uma rede. Talvez a tecnologia esteja literalmente disponível, mas eu não saberia onde/o quê.

informação relacionada