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

Vonage 2024 Hackathon Winner Spotlight : Exécution de code à distance

Publié le February 13, 2025

Temps de lecture : 5 minutes

Rencontrer Sina Madani

Chez Vonage, nous aimons voir les développeurs repousser les limites, et lors de notre dernier hackathon à l'échelle de l'entreprise, Sina Madani l'a fait. Son projet, Exécution de code à distancechange la donne : il permet d'accéder à distance à une machine sans SSH ni client de bureau à distance. sans SSH ni client de bureau à distance.

Pensez-y : Que se passerait-il si vous deviez envoyer des commandes à une machine située à l'autre bout du monde, mais que vous ne puissiez pas utiliser SSH ? La solution de Sina rend cela possible en utilisant API de Vonage, Java et des techniques de mise en réseau. Son projet est également disponible sur GitHub.

Le défi : Accès à distance, pas de SSH

Secure Shell (SSH) et les clients de bureau à distance sont les plus utilisés pour l'accès à distance, mais ils présentent des limites :

  • Restrictions des pare-feux - Certains réseaux bloquent SSH.

  • Complexité pour l'utilisateur - La configuration des clés SSH et des règles d'accès n'est pas toujours simple.

  • Problèmes de sécurité - Les ports ouverts peuvent présenter un risque.

L'approche de Sina contourne ces problèmes en utilisant les API de messagerie et d'authentification de Vonage. les API de messagerie et d'authentification de Vonage de Vonage pour envoyer et exécuter des commandes en toute sécurité.

Comment ça marche

À la base, le projet permet à un utilisateur d'envoyer une commande par SMS, WhatsApp, Viber ou Messenger à l'aide de l'API Messages et, en cas d'authentification, la commande est exécutée sur le système distant. Le résultat est ensuite renvoyé par le même canal de messagerie.

Pile technologique/pré-requis

  • Compte de développeur Vonage avec un numéro de téléphone Vonage

    Pour acheter un numéro de téléphone virtuel, rendez-vous sur votre tableau de bord API et suivez les étapes ci-dessous.

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

    1. Accédez à votre tableau de bord API

    2. Naviguez vers CONSTRUIRE & GERER > Numbers > Acheter des Numbers.

    3. Choisissez les attributs nécessaires et cliquez sur Rechercher

    4. Cliquez sur le bouton Acheter à côté du numéro désiré et validez votre achat

    5. Pour confirmer que vous avez acheté le numéro virtuel, allez dans le menu de navigation de gauche, sous CONSTRUIRE & GÉRER, cliquez sur Numéros, puis sur Vos Numéros

  • SDK Java de Vonage & APIs

  • Ngrok (pour exposer le serveur local en toute sécurité)

  • Java 21 & Spring Boot

En coulisses

Voici la "magie" qui se cache derrière le projet de Sina :

1. Authentification et sécurité d'abord

Avant d'exécuter une commande, le système vérifie l'identité de l'utilisateur au moyen d'une authentification par SMS.

  • A lien d'authentification unique est envoyé via Authentification silencieuse.

  • Si la vérification des données mobiles échoue, une authentification vocale de secours par code PIN de secours basée sur la voix.

  • Les Numbers non autorisés sont automatiquement bloqués.

  • Si un utilisateur tente à nouveau de s'authentifier avant l'expiration du délai, il reçoit une notification de temps d'attente.

2. Exécution des commandes par la messagerie

Une fois authentifié, l'utilisateur peut envoyer une commande par SMS, WhatsApp ou un autre canal pris en charge. Le système :

  • Reçoit la commande

  • L'exécuter dans un shell restreint

  • Renvoie la sortie

3. Configuration automatisée pour un déploiement sans souci

  • L'application attribue dynamiquement attribue dynamiquement un numéro Vonage disponible pour traiter les messages.

  • Si nécessaire, un nouveau numéro est acheté et lié automatiquement.

  • Les URL des webhooks sont mises à jour dynamiquement par l'intermédiaire de l'API de Vonage.

Exécution du projet

Si vous voulez l'essayer vous-même, clonez le fichier repo et configurez votre fichier .env avec :

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 vous avez IntelliJ IDEA est installé, vous pouvez importer ce projet et l'exécuter dans l'IDE, où le point d'entrée est l'élément Application classe (src/main/java/com/vonage/hackathon/rce/Application.java).

Pour exécuter la démo de manière autonome à partir de la ligne de commande, procédez comme suit:

mvn install spring-boot:run

Besoin d'aide pour trouver votre clé API et votre secret API ?

Ouvrez votre Page des paramètres de l'API pour accéder à votre clé et à votre secret API de Vonage, qui sont tous deux affichés comme indiqué dans la capture d'écran ci-dessous. La clé API se trouve en haut de la page, et pour accéder à votre secret API, veuillez vous référer à la sous-section "Secret du compte".

Remarque : si vous ne vous souvenez plus de votre secret API précédemment créé, cliquez sur "+ Créer un nouveau secret" et sauvegardez-le en toute sécurité.

Pour plus de commodité, vous pouvez ajouter ce qui suit à vos variables d'environnement (~/.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
}

Démarrez ensuite le service :

ngrok http $VCR_PORT

Vos webhooks Vonage seront automatiquement mis à jour pour pointer vers votre nouvelle URL Ngrok.

Conclusion

Et c'est tout ! En utilisant le SDK Java de Vonage, les capacités de messagerie et les flux de travail d'authentification, les développeurs peuvent créer des solutions qui vont au-delà de ce que la plupart des gens font sans les outils SSH ou de bureau à distance traditionnels - tout comme Sina l'a fait ! Si cela vous a donné des idées, essayez-le vous-même ! Vous pouvez également rejoindre la communauté des développeurs de Vonage sur Slack ou me suivre moi et/ou l'équipe DevEx sur X (anciennement Twitter). Faites-nous savoir ce que vous construisez - nous serions ravis de présenter votre projet ensuite !

Partager:

https://a.storyblok.com/f/270183/384x384/b68093ec17/diana-pham.png
Diana PhamDéfenseur des développeurs

Diana est défenseur des développeurs chez Vonage. Elle aime manger des huîtres fraîches.