https://a.storyblok.com/f/270183/1368x665/b7ab662529/25feb_dev-blog_2024-hack-winners.png

Vonage 2024 Hackathon Ganador Spotlight: Ejecución remota de código

Publicado el February 13, 2025

Tiempo de lectura: 5 minutos

Conozca a Sina Madani

En Vonage, nos encanta ver cómo los desarrolladores superan los límites, y durante nuestro último hackathon para toda la empresa, Sina Madani hizo exactamente eso. Su proyecto, Ejecución remota de códigocambia las reglas del juego: permite el acceso remoto a una máquina sin SSH ni un cliente de escritorio remoto..

Piense en ello: ¿Qué pasaría si necesitaras enviar comandos a una máquina al otro lado del mundo pero no pudieras usar SSH? La solución de Sina lo hace posible utilizando API de Vonage, Java y técnicas de red. Su proyecto también está disponible en GitHub.

El reto: Acceso remoto, sin SSH

Secure Shell (SSH) y los clientes de escritorio remoto son los más utilizados para el acceso remoto, pero tienen sus limitaciones:

  • Restricciones del cortafuegos - Algunas redes bloquean SSH.

  • Complejidad del usuario - Configurar claves SSH y reglas de acceso no siempre es sencillo.

  • Problemas de seguridad - Los puertos abiertos pueden ser un riesgo.

El enfoque de Sina evita estos problemas utilizando API de mensajería y autenticación de Vonage para enviar y ejecutar comandos de forma segura.

Cómo funciona

En esencia, el proyecto permite al usuario enviar una orden a través de SMS, WhatsApp, Viber o Messenger utilizando la Messages API, y si se autentica, el comando se ejecuta en el sistema remoto. El resultado se devuelve a través del mismo canal de mensajería.

Pila tecnológica/Requisitos previos

  • cuenta de desarrollador de Vonage con un número de teléfono de Vonage

    Para comprar un número de teléfono virtual, vaya a su panel API y siga los pasos que se indican a continuación.

    Steps on how to purchase a phone number from the dashboard, from selecting the number and confirming the selection.Purchase a phone number

    1. Vaya a su Panel API

    2. Vaya a CONSTRUIR Y GESTIONAR > Numbers > Comprar Numbers.

    3. Elija los atributos necesarios y haga clic en Buscar

    4. Pulse el botón Comprar junto al número que desee y valide su compra

    5. Para confirmar que ha adquirido el número virtual, vaya al menú de navegación de la izquierda, en CONSTRUIR Y GESTIONAR, haga clic en Numbers y, a continuación, en Sus Numbers.

  • SDK Java de Vonage y API

  • Ngrok (para exponer el servidor local de forma segura)

  • Java 21 & Spring Boot

Entre bastidores

He aquí la "magia" del proyecto de Sina:

1. Autenticación y seguridad en primer lugar

Antes de ejecutar cualquier comando, el sistema verifica al usuario mediante autenticación SMS.

  • A enlace de autenticación de un solo uso se envía a través de Autenticación silenciosa.

  • Si falla la verificación de datos móviles, se autenticación de voz mediante PIN de voz.

  • Numbers no autorizados son automaticamente bloqueados.

  • Si un usuario intenta autenticarse de nuevo antes de que se agote el tiempo de espera, recibe una notificación de tiempo de espera.

2. Ejecución de comandos a través de mensajería

Una vez autenticado, el usuario puede enviar una orden por SMS, WhatsApp u otro canal compatible. El sistema:

  • Recibe la orden

  • Se ejecuta en un shell restringido

  • Devuelve la salida

3. Configuración automatizada para una implantación sin complicaciones

  • La aplicación asigna dinámicamente asigna un número de Vonage disponible disponible para gestionar los mensajes.

  • En caso necesario se adquiere un nuevo número y se vincula automáticamente.

  • Las URL de Webhook se actualizan dinámicamente a través de la API de aplicaciones de Vonage.

Ejecución del proyecto

Si quieres probarlo tú mismo, clona el repositorio repo y configura tu archivo .env con:

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.

Si dispone de IntelliJ IDEA instalado, puede importar este proyecto y ejecutarlo a través del IDE, donde el punto de entrada es la clase Application clase (src/main/java/com/vonage/hackathon/rce/Application.java).

Para ejecutar la demo de forma autónoma desde la línea de comandos, haga lo siguiente:

mvn install spring-boot:run

¿Necesita ayuda para encontrar su clave API y su secreto API?

Abra su Página de configuración de API para acceder a tu clave y secreto de API de Vonage, que aparecen como se muestra en la captura de pantalla a continuación. La clave de API se encuentra en la parte superior de la página, y para acceder a tu secreto de API, consulta la subsección "Secreto de Account".

Nota: En caso de que no recuerde su secreto de API creado anteriormente, haga clic en "+ Crear nuevo secreto" y guárdelo de forma segura.

Para mayor comodidad, puede añadir lo siguiente a sus variables de entorno (~/.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
}

A continuación, inicie el servicio:

ngrok http $VCR_PORT

Tus webhooks de Vonage se actualizarán automáticamente para apuntar a tu nueva URL de Ngrok.

Conclusión

¡Y eso es todo! Al usar el SDK Java de Vonage, las capacidades de mensajería y los flujos de trabajo de autenticación, los desarrolladores pueden crear soluciones que van más allá de lo que la mayoría de las personas hacen sin las herramientas tradicionales SSH o de escritorio remoto, ¡tal como lo hizo Sina! Si esto te despertó algunas ideas, ¡pruébalo tú mismo! También puedes unirte a nuestra comunidad de desarrolladores de Vonage en Slack o seguirme en y/o al equipo de DevEx en X (antes Twitter). Háganos saber lo que está construyendo, ¡nos encantaría presentar su proyecto a continuación!

Compartir:

https://a.storyblok.com/f/270183/384x384/b68093ec17/diana-pham.png
Diana PhamDefensor del Desarrollador

Diana es desarrolladora de Vonage. Le gusta comer ostras frescas.