Como executar um aplicativo local em um servidor distante com SSH?

1

Gostaria de saber se é possível executar um aplicativo local em um servidor distante usando o protocolo SSH?

    
por mnml 03.02.2011 / 16:36

4 respostas

1

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

  • ssh no servidor distante

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

    • Isso pode ser feito via sshfs, desde que você possa ssh do servidor para o sistema local. Eu acho que você pode improvisar isso enviando uma porta de volta através da conexão que você fez quando sshing de local para servidor, mas eu não cheguei a tais travessuras eu mesmo.
      • Normalmente, se a máquina local estiver em uma rede doméstica, você apenas configuraria o encaminhamento de porta em 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, scp ing o arquivo id_?sa.pub de volta ao local para anexá-lo ao seu ~/.ssh/authorized_keys . Restringir os endereços IP que podem ssh em sua máquina é outra boa idéia. Et cetera.
    • Se você quiser executar qualquer coisa que precise ser executada como root, eu acho que você precisará configurar a montagem sshfs para ser root em seu sistema de arquivos local. Isso significa que você precisa permitir que as pessoas sigam sua caixa local como root, que é outro movimento de política duvidoso. Eu realmente não tenho certeza sobre isso, você pode ser capaz de sudo dentro do shell chroot.
    • Você pode montá-lo de outras maneiras, por exemplo, por meio do NFS, mas o sshfs é provavelmente o mais fácil de proteger. Fazer tudo isso em uma VPN provavelmente seria mais sensato.
  • Uma vez que você tenha o sistema de arquivos montado, e ainda esteja ssh-in-ed para o servidor, faça

    chroot / path / to / mount / do / local / filesystem COMANDO ARGS

Ou você pode apenas cd para o diretório e executar chroot e, em seguida, você terá um shell raiz 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 no servidor. E.G.

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

salvará a lista de arquivos denominados "somefile" em seu diretório temporário inicial no servidor .

advertências

Isto é, pelo menos do meu ponto de vista, bastante experimental. Eu não tenho certeza do que poderia dar errado, mas eu não tentaria, a menos que algumas pessoas garantam isso. Mesmo assim, eu não tentaria 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 TAL 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 em execução no servidor. Provavelmente seria melhor se eles fossem a mesma versão. Portanto, se tanto a sua caixa local como o servidor remoto estiverem executando o Debian Squeeze de 32 bits, isso pode funcionar sem problemas.

Além disso, pode haver uma vantagem muito limitada em fazer as coisas dessa maneira, já que os dados que precisam ser transferidos - incluindo os arquivos a serem processados e os próprios aplicativos - terão que ser criptografados e transferidos. sobre sua conexão remota. Então, se você está procurando fazer isso para aproveitar o poder de processamento superior do servidor, você pode não ganhar muito no final e pode perder alguns.

    
por 28.02.2011 / 23:56
2

Isso depende muito de como você define os termos que você 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 na qual estou sentado está executando o código'

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

Então, o que vai ser?

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

  • Você quer que seu aplicativo local seja processado por CPU (s) do servidor? Então você tem que copiar seu binário / o aplicativo local para o servidor e, em seguida, iniciá-lo no servidor. Você poderia usar o ssh para fazer a cópia. Mas o seu 'aplicativo local' não é mais aquele local depois da cópia.

Você não pode executar código em uma CPU sem disponibilizá-la à CPU antes.

    
por 03.02.2011 / 16:45
0

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

E eu acho que você pode a partir do acesso da máquina A dizer um arquivo de instalação da máquina B, e executá-lo na máquina A, que iria transferir o arquivo para a RAM da máquina A. Eu acho que o compartilhamento de arquivos do windows faz isso. (que não move ou copia o arquivo pelo caminho, nenhum arquivo desaparece ou aparece em qualquer lugar ao fazer isso. Melhor terminologia pode ser que o arquivo seja copiado para a RAM e se torne um processo, isso acontece sempre que um programa é executado mesmo quando local)

Em teoria, suponho que uma CPU e instruções muito legais pudessem ser lidas a partir da RAM em outro computador. Você gostaria de uma rede também. Talvez a tecnologia esteja literalmente lá fora, mas eu não saberia onde / o quê.

    
por 28.02.2011 / 21:06
0

Um pequeno script 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}"
    
por 08.02.2017 / 15:45

Tags