Skip to main content

Às vezes é necessário acessar gateways e Acceleros on-premises por diversos motivos: fazer upgrades, investigar problemas, etc...

Por natureza, esses equipamentos existem fisicamente e provavelmente estão "no ambiente físico do cliente" (não estão em nuvem). Por isso, o acesso remoto é às vezes complicado e às vezes impossivel.

Para os casos em que esses equipamentos têm acesso à internet, criamos uma forma de estabelecer conexões através de SSH reverso. Essa é a forma mais indicada para acessar esses equipamentos quando necessário.

SSH REVERSO

Quer saber o que é e como funciona? Leia aqui:

https://www.howtogeek.com/428413/what-is-reverse-ssh-tunneling-and-how-to-use-it/

GATEWAYS - CONCEITO

Todos os gateways "escutam" o tópico <FACILITY>/<VENDOR>/<SERIAL>/remotecommand.

Mensagens JSON recebidas nesse tópico devem ter o seguinte formato:

{"cmd": "adhoc", "data": "comando a executar no host; outro comando; echo 'abc' > /teste.txt; etc;"}

Assim que uma mensagem é recebida:

  • é gerada uma resposta imediata no MQTT para confirmação de recepção <FACILITY>/<VENDOR>/<SERIAL>/remotecommand_ack);
  • é gravado em disco um arquivo com o exato conteúdo da chave data da mensagem.

Tudo isso acontece no nível dos containers Docker.

O diretório aonde o arquivo foi escrito é monitorado pelo host através de serviço inotify. Ao perceber que esse arquivo foi criado, o inotify:

  • move o arquivo para uma pasta temporária;
  • executa como root no host o conteúdo do arquivo.

Por isso, é possível enviar através dessa mensagem MQTT um comando de "conecte via SSH reverso nesse endereço aqui". Por exemplo:

{"cmd": "adhoc", "data": "sshpass -p senhaSSH ssh -fNR 10000:localhost:22 123.123.123.123"}

ON-PREMISES - CONCEITO

Como o Accelero on-premises não tem conexão MQTT pra fora, não é possível usar a mesma estrutura criada para o gateway. A opção, nesse caso, foi por usar um serviço de poller.

Todo on-premises, de minuto em minuto, faz um request para o seguinte endereço:

https://ozone.iongrade.com.br/adhocpoller/poller.php?facility=<FACILITY_DO_ONPREMISES>

Se houver um arquivo no mesmo diretório desse script com o nome do facility (onde/estiverhospedado/ozone/app/public/adhocpoller/<FACILITY>), o conteúdo do arquivo é retornado no request, e o arquivo é imediatamente excluído.

Da mesma forma que ocorre no gateway, o conteúdo recebido pelo on-premises será executado como root no host. O comum é enviar um comando de "conecte via SSH reverso nesse endereço aqui" (vide gateway acima).

COMO HABILITAR O SSH REVERSO

O nosso servidor diacetyl tem a estrutura necessária pra ser o "servidor de SSH reverso".

Conecte por lá e faça o seguinte:

#PARA GATEWAYS
/root/docker/ssh2/scripts/start.sh
#SIGA AS INSTRUÇÕES EM TELA, PORQUE ESSE SCRIPT JÁ FAZ TUDO PRA VOCÊ, BASTA AGUARDAR ALGUNS SEGUNDOS

#PARA ON-PREMISES
/root/docker/ssh2/scripts/adhoc.sh
echo "<MENSAGEM QUE RETORNOU DO SCRIPT ACIMA --- sshpass -p ......>" > /root/docker/ozone/app/public/adhocpoller/<FACILITY>

#PARA CONEXÕES MANUAIS
/root/docker/ssh2/scripts/adhoc.sh
#E DAÍ EXECUTA NO HOST REMOTO O COMANDO QUE RETORNOU AQUI

PROBLEMAS COMUNS

Gateways

O serviço do inotify, por diversos motivos, pode não estar no ar. Se isso acontecer, não há o que ser feito, e essa estrutura não vai funcionar. Nesse caso, a sugestão é conseguir uma conexão local (AnyDesk + SSH na rede local) e reiniciar o serviço:

#SE O HOST FOR UBUNTU
systemctl | grep watch #para descobrir o nome exato do serviço, vai depender do modelo do gateway
systemctl restart <SERVICO>

#SE O HOST FOR DISTRO-IONGRADE
/etc/init.d/S99inotify restart

On-premises

O mais comum é que o on-premises simplesmente não tenha conexão com a internet, e daí não tem o que fazer.

Pra conferir se o poller está funcionando/batendo no Ozone:

#EXECUTAR NO SERVIDOR AONDE ESTÁ O OZONE
docker logs infra-nginx --tail 1000 -f | grep <FACILITY>