
Compartilhar:
Diana é defensora de desenvolvedores na Vonage. Ela gosta de comer ostras frescas.
Destaque do vencedor do Hackathon da Vonage 2024: Execução remota de código
Tempo de leitura: 5 minutos
Conheça Sina Madani
Na Vonage, adoramos ver os desenvolvedores ultrapassarem limites e, durante nosso mais recente hackathon em toda a empresa, Sina Madani fez exatamente isso. Seu projeto, Execução Remota de Código, é uma inovação revolucionária — permitindo o acesso remoto a uma máquina sem SSH ou um cliente de área de trabalho remota.
Pense nisso: e se você precisasse enviar comandos para uma máquina do outro lado do mundo, mas não pudesse usar o SSH? A solução da Sina torna isso possível usando as APIs da Vonage, Java e técnicas de rede. Seu projeto também está disponível no GitHub.
O desafio: acesso remoto, sem SSH
Secure Shell (SSH) e os clientes de área de trabalho remota são as opções mais comuns para acesso remoto, mas apresentam limitações:
Restrições do firewall – Algumas redes bloqueiam o SSH.
Complexidade do usuário – Configurar chaves SSH e regras de acesso nem sempre é simples.
Questões de segurança – Portas abertas podem representar um risco.
A abordagem da Sina contorna esses problemas utilizando as APIs de mensagens e autenticação da Vonage para enviar e executar comandos com segurança.
Como funciona
Em essência, o projeto permite que um usuário envie um comando por meio de SMS, WhatsApp, Viber ou Messenger usando a Messages API e, se autenticado, o comando é executado no sistema remoto. O resultado é então enviado de volta pelo mesmo canal de mensagens.
Pilha de tecnologias/Pré-requisitos
Account de desenvolvedor da Vonage com um número de telefone da Vonage
Para comprar um número de telefone virtual, acesse seu painel da API e siga as etapas mostradas abaixo.
Purchase a phone numberAcesse seu painel da API
Acesse CRIAR E GERENCIAR > Numbers > Comprar números.
Selecione os atributos necessários e, em seguida, clique em “Pesquisar”
Clique no botão “Comprar” ao lado do número desejado e confirme sua compra
Para confirmar que você adquiriu o número virtual, acesse o menu de navegação à esquerda, na seção “CRIAR E GERENCIAR”, clique em “Numbers” e, em seguida, em “Seus números”
SDK Java da Vonage e APIs
Mensagens (SMS, WhatsApp, Viber, Messenger)
Verify (para autenticação)
Applications e Numbers (para gerenciamento programático de números)
Troca de cartão SIM (verificação de segurança)
Ngrok (para expor o servidor local com segurança)
Nos bastidores
Eis a “mágica” por trás do projeto de Sina:
1. Autenticação e segurança em primeiro lugar
Antes de executar qualquer comando, o sistema verifica a identidade do usuário por meio de autenticação via SMS.
Um link de autenticação único é enviado por meio de Autenticação Silenciosa.
Se a verificação de dados móveis falhar, uma autenticação de PIN por voz de reserva é acionada.
Números não autorizados são automaticamente colocados na lista de bloqueados.
Se um usuário tentar se autenticar novamente antes do tempo limite, ele receberá uma notificação sobre o tempo de espera.
2. Execução de comandos por meio de mensagens
Após a autenticação, o usuário pode enviar um comando por SMS, WhatsApp ou outro canal compatível. O sistema:
Recebe o comando
Executa o programa em um shell restrito
Retorna a saída
3. Configuração automatizada para uma implantação sem complicações
O aplicativo atribui dinamicamente atribui um número da Vonage disponível para processar as mensagens.
Se necessário, um novo número é adquirido e vinculado automaticamente.
As URLs dos webhooks são atualizadas dinamicamente por meio da API de aplicativos da Vonage.
Execução do projeto
Se você quiser testar isso por conta própria, clone o repositório e configure seu .env arquivo com:
VONAGE_API_KEY: Vonage account API key.
VONAGE_API_SECRET: Vonage account API secret.
VONAGE_APPLICATION_ID: Vonage application UUID.
VONAGE_PRIVATE_KEY_PATH: Absolute path to the private key associated with your Vonage application.
TO_NUMBER: Client phone number that is allowed to run commands.
VONAGE_HACKATHON_SERVER_URL: External URL of the server. Typically, this would be an ngrok.app URL.
VCR_PORT: Port to run the demo on. By default, this is 8080.Se você tiver o IntelliJ IDEA instalado, você pode importar este projeto e executá-lo pelo IDE, onde o ponto de entrada é a Application classe (src/main/java/com/vonage/hackathon/rce/Application.java).
Para executar a demonstração de forma independente a partir da linha de comando, digite:
mvn install spring-boot:runPrecisa de ajuda para encontrar sua chave de API e seu segredo de API?
Abra sua página de configurações da API para acessar sua chave e seu segredo da API da Vonage, ambos exibidos conforme mostrado na captura de tela abaixo. A chave da API está localizada na parte superior da página e, para acessar seu segredo da API, consulte a subseção “Segredo da Account”.
Observação: caso você não se lembre do seu segredo de API criado anteriormente, clique em “+ Criar novo segredo” e guarde-o em um local seguro.

Por conveniência, você pode adicionar o seguinte às suas variáveis de ambiente (~/.bashrc or ~/.zshrc):
export VCR_PORT=9080
export NGROK_URL="https://[id].ngrok.app"
export VONAGE_HACKATHON_SERVER_URL=$NGROK_URL
function ngrokUrl() {
local url=$(curl -s localhost:4040/api/tunnels | jq -r '.tunnels[0].public_url')
sed -i '' "s|\(^export NGROK_URL=\).*|\1\"$url\"|" ~/.zshrc
source ~/.zshrc && echo $NGROK_URL
}Em seguida, inicie o serviço:
ngrok http $VCR_PORTSeus webhooks da Vonage serão atualizados automaticamente para apontar para sua nova URL do Ngrok.
Conclusão
E é isso! Ao utilizar o SDK Java da Vonage, os recursos de mensagens e os fluxos de trabalho de autenticação, os desenvolvedores podem criar soluções que vão além do que a maioria das pessoas consegue fazer sem as ferramentas tradicionais de SSH ou de área de trabalho remota – exatamente como a Sina fez! Se isso despertou algumas ideias, experimente você mesmo! Você também pode participar da nossa Comunidade de Desenvolvedores da Vonage no Slack ou seguir a mim e/ou a equipe DevEx no X (antigo Twitter). Conte-nos o que você está desenvolvendo — adoraríamos destacar seu projeto na próxima edição!