
Compartir:
Diana es desarrolladora de Vonage. Le gusta comer ostras frescas.
Vonage 2024 Hackathon Ganador Spotlight: Ejecución remota de código
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.
Purchase a phone numberVaya a su Panel API
Vaya a CONSTRUIR Y GESTIONAR > Numbers > Comprar Numbers.
Elija los atributos necesarios y haga clic en Buscar
Pulse el botón Comprar junto al número que desee y valide su compra
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
Mensajes (SMS, WhatsApp, Viber, Messenger)
Verify (para autenticación)
Aplicaciones & Numbers (para la gestión programática de Numbers)
Intercambio de SIM (control de seguridad)
Ngrok (para exponer el servidor local de forma segura)
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_PORTTus 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 mí 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!