Executando o Mathematica em uma máquina remota (usando frontend e ssh)

Oct 13 2020

Tenho tentado executar meu código do Mathematica em uma máquina remota. Estou usando o Windows e a máquina remota é uma máquina Linux. Eu escrevo um bloco de notas em minha máquina local, converto em um arquivo .m e uso o WinSCP para colocá-lo na máquina remota.

Tentei me conectar à máquina remota pelo front end (https://reference.wolfram.com/language/howto/ConnectToARemoteKernel.html), mas obteve o erro: O kernel falhou ao conectar ao front end. (Erro = MLECONNECT). Você deve tentar executar a conexão do kernel fora do front end.

Então, decidi fazer o ssh na máquina remota e executar o código por meio da linha de comando. No entanto, nenhum dos meus arquivos .m seria executado. Não haveria erro, mas também não haveria saída. Decidi tentar a seguinte resposta, onde crio um script de shell: kernel remoto por SSH

Mas ele falha com o código de saída 65280 , junto com o seguinte erro: Porta inválida 'w'

Estou realmente perdido quanto ao problema. Eu desliguei meu firewall sem sucesso. E se eu escrever um script do Mathematica na máquina e executá-lo, ele funciona. Tentei estabelecer uma conexão VPN com a máquina remota, mas recebi o erro: A conexão remota não foi feita porque a tentativa de túneis VPN falhou . Há verificações básicas que devo fazer?

Eu ficaria imensamente grato por qualquer ajuda.

Respostas

2 EdoardoBaldi Oct 15 2020 at 01:22

Eu só queria postar um comentário, mas não tenho reputação suficiente. Estive discutindo esse tópico em uma postagem da comunidade Wolfram . Eu compartilhei lá minha solução de trabalho (no momento, quero testá-la mais extensivamente) que depende da configuração de um servidor VPN local e da conexão da máquina remota a ele.


Atualizar

Conforme sugerido pelo Artes nos comentários, fornecerei aqui alguns detalhes sobre a solução que é discutida na postagem da comunidade com link acima.

A solução que vou descrever depende da possibilidade de

  1. instalar e configurar um servidor VPN local (por exemplo, em seu roteador)
  2. instalar um firmware personalizado em seu roteador que habilite o suporte ao servidor VPN.

Eu diria que também pode ser possível configurar o servidor em outro lugar na LAN local (por exemplo, em um Raspberry Pi), mas não testei essa solução e acho que a configuração geral pode ser um pouco diferente, sem considerar o gargalo decorrente de um dispositivo adicional operando no meio.

Não posso fornecer um guia detalhado sobre como configurar o servidor VPN, pois depende do hardware que você possui. Ainda assim, existe um artigo muito completo que explica o procedimento de instalação e configuração de um servidor VPN em seu roteador, incluindo a instalação de um firmware personalizado (se seu roteador for compatível).

Dito isso, o procedimento se resume em três etapas:

  1. Configurando o servidor VPN: instalando os pacotes OpenVPN e criando os certificados e chaves para o servidor e para o (s) cliente (s)
  2. Juntando um perfil de configuração OpenVPN (um profile.ovpnarquivo) para seu cliente. Depois que seu servidor é configurado, ele fornece um perfil genérico ao qual você deve adicionar o certificado e a chave que criou na etapa 1. Você também terá que criar pelo menos um par de credenciais de usuário (nome de usuário / senha) para cliente: isso pode ser feito mais uma vez durante a configuração do servidor.
  3. Instalando o cliente VPN em sua máquina remota e conectando-se ao servidor. Normalmente, a conexão é tão simples quanto emitir um openvpn --config profile.ovpnno seu servidor.

Uma advertência é a seguinte: se você estiver conectado ao servidor por meio de SSH, é muito provável que sua conexão caia. O motivo é que o servidor OpenVPN mudará o gateway padrão no servidor: a rota de sua máquina local para o servidor permanece inalterada, mas o tráfego do servidor para a máquina local agora passa pelo gateway VPN. Esta é uma explicação resumida: não acho que seja o lugar certo para explicar os detalhes de rede que você pode encontrar, por exemplo, aqui . No entanto, existe uma solução rápida para esse problema. Antes de iniciar o cliente VPN, diga ao servidor para não rotear todo o tráfego através da VPN, mas através do gateway anterior com algo semelhante route add -host <public IP local machine> gw <default gateway server>.

A solução anterior depende de ter um IP público estático associado à sua conexão de internet local. Se não for esse o caso, uma forma de lidar com isso e, ao mesmo tempo, tornar seu servidor VPN sempre acessível é usando um serviço DNS Dinâmico.

Depois que tudo estiver configurado no lado da VPN - servidor em execução e máquina remota conectada -, sua máquina remota terá um novo endereço IP na sub-rede criada pelo servidor VPN. Este é o endereço que você deve usar no perfil "Configuração do kernel" no Wolfram Mathematica / Desktop. Na minha máquina local (macOS ou um laptop Ubuntu com Wolfram Desktop 12.1), estou usando o SSH do sistema para estabelecer a conexão. Aqui está, por exemplo, outra resposta que mostra como fazer.

Como comentário final, um colega meu apontou este programa útil escrito em Python chamado sshuttleque poderia ser uma alternativa de trabalho muito menos elaborada para configurar do que um servidor OpenVPN completo. Também quero experimentar, mas ainda não tentei.

Espero que esses detalhes adicionais tornem a resposta mais útil.