
Teilen Sie:
Diana ist Entwicklungsbeauftragte bei Vonage. Sie isst gerne frische Austern.
Vonage 2024 Hackathon-Gewinner im Blickpunkt: Remote-Code-Ausführung
Lesedauer: 4 Minuten
Treffen Sie Sina Madani
Wir bei Vonage lieben es, wenn Entwickler Grenzen überschreiten, und während unseres letzten unternehmensweiten Hackathons, Sina Madani genau das getan. Sein Projekt, Remote-Code-Ausführungermöglicht den Fernzugriff auf eine Maschine ohne SSH oder einen Remote-Desktop-Client.
Denken Sie darüber nach: Was wäre, wenn Sie Befehle an einen Rechner auf der anderen Seite der Welt senden müssten, aber kein SSH verwenden könnten? Sinas Lösung macht das möglich, indem sie Vonage-APIs, Java und Netzwerktechniken. Sein Projekt ist auch verfügbar auf GitHub.
Die Herausforderung: Fernzugriff, kein SSH
Sichere Shell (SSH) und Remote-Desktop-Clients sind das Mittel der Wahl für den Fernzugriff, aber sie haben ihre Grenzen:
Firewall-Einschränkungen - Einige Netzwerke blockieren SSH.
Komplexität der Benutzer - Die Einrichtung von SSH-Schlüsseln und Zugangsregeln ist nicht immer einfach.
Sicherheitsprobleme - Offene Ports können ein Risiko darstellen.
Sinas Ansatz umgeht diese Probleme durch die Verwendung von Nachrichten- und Authentifizierungs-APIs von Vonage um Befehle sicher zu senden und auszuführen.
Wie es funktioniert
Im Kern ermöglicht das Projekt dem Benutzer, einen Befehl über SMS, WhatsApp, Viber oder Messenger einen Befehl über die Messages API zu senden, der dann, wenn er authentifiziert ist, auf dem entfernten System ausgeführt wird. Die Ausgabe wird dann über denselben Messaging-Kanal zurückgesendet.
Tech Stack/Voraussetzungen
Vonage Entwickler Account mit einer Vonage-Rufnummer
Um eine virtuelle Rufnummer zu kaufen, gehen Sie zu Ihrem API-Dashboard und befolgen Sie die unten aufgeführten Schritte.
Purchase a phone numberGehen Sie zu Ihrem API-Dashboard
Navigieren Sie zu BUILD & MANAGE > Numbers > Buy Numbers.
Wählen Sie die gewünschten Attribute und klicken Sie dann auf Suchen
Klicken Sie auf die Schaltfläche Kaufen neben der gewünschten Nummer und bestätigen Sie Ihren Kauf.
Um zu bestätigen, dass Sie die virtuelle Nummer erworben haben, gehen Sie im linken Navigationsmenü unter BUILD & MANAGE auf Numbers und dann auf Your Numbers
Vonage Java SDK & APIs
Nachrichten (SMS, WhatsApp, Viber, Messenger)
Verify (zur Authentifizierung)
Applikation & Numbers (für programmatische Numbers-Verwaltung)
SIM-Tausch (Sicherheitsüberprüfung)
Ngrok (um den lokalen Server sicher freizulegen)
Hinter den Kulissen
Das ist die "Magie" hinter Sinas Projekt:
1. Authentifizierung und Sicherheit zuerst
Bevor ein Befehl ausgeführt wird, verifiziert das System den Benutzer per SMS-Authentifizierung.
A einmaliger Authentifizierungslink wird gesendet über Stille Authentifizierung.
Wenn die mobile Datenverifizierung fehlschlägt, wird eine sprachbasierte PIN-Authentifizierung zum Einsatz.
Unerlaubte Numbers werden automatisch auf eine Sperrliste gesetzt.
Versucht ein Benutzer, sich vor Ablauf der Zeit erneut zu authentifizieren, erhält er eine Benachrichtigung über die Wartezeit.
2. Befehlsausführung über Messaging
Nach der Authentifizierung kann der Benutzer einen Befehl per SMS, WhatsApp oder über einen anderen unterstützten Kanal senden. Das System:
Empfängt den Befehl
Führt es in einer eingeschränkten Shell aus
Sendet die Ausgabe zurück
3. Automatisierte Einrichtung für problemlose Bereitstellung
Die Anwendung weist dynamisch eine verfügbare Vonage-Nummer zugewiesen um Nachrichten zu bearbeiten.
Falls erforderlich, wird eine neue Nummer erworben und automatisch verknüpft.
Webhook-URLs werden dynamisch dynamisch über die Anwendungs-API von Vonage aktualisiert.
Durchführung des Projekts
Wenn Sie dies selbst ausprobieren möchten, klonen Sie das Repo und richten Sie Ihre .env Datei mit:
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.Wenn Sie über IntelliJ IDEA installiert haben, können Sie dieses Projekt importieren und in der IDE ausführen, wobei der Einstiegspunkt die Application Klasse (src/main/java/com/vonage/hackathon/rce/Application.java).
Um die Demo eigenständig von der Kommandozeile aus zu starten, gehen Sie wie folgt vor:
mvn install spring-boot:runBenötigen Sie Hilfe bei der Suche nach Ihrem API-Schlüssel und API-Geheimnis?
Öffnen Sie Ihre API-Einstellungen-Seite um auf Ihren Vonage API-Schlüssel und Ihr API-Geheimnis zuzugreifen, die beide wie im Screenshot unten dargestellt angezeigt werden. Der API-Schlüssel befindet sich oben auf der Seite, und um auf Ihr API-Geheimnis zuzugreifen, lesen Sie bitte den Unterabschnitt "Account secret".
Hinweis: Falls Sie sich nicht an Ihr zuvor erstelltes API-Geheimnis erinnern können, klicken Sie auf "+ Neues Geheimnis erstellen" und speichern Sie es sicher.

Der Einfachheit halber können Sie Folgendes zu Ihren Umgebungsvariablen hinzufügen (~/.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
}Starten Sie dann den Dienst:
ngrok http $VCR_PORTIhre Vonage Webhooks werden automatisch aktualisiert und verweisen auf Ihre neue Ngrok-URL.
Schlussfolgerung
Und das war's! Durch die Verwendung des Java SDK, der Messaging-Funktionen und der Authentifizierungs-Workflows von Vonage können Entwickler Lösungen entwickeln, die über das hinausgehen, was die meisten Menschen ohne herkömmliche SSH- oder Remote-Desktop-Tools tun - genau wie Sina es getan hat! Wenn dies einige Ideen geweckt hat, probieren Sie es selbst aus! Sie können auch unserer Vonage Developer Community beitreten auf Slack oder folgen Sie mir und/oder dem DevEx-Team auf X (früher Twitter). Lassen Sie uns wissen, was Sie bauen - wir würden Ihr Projekt gerne als nächstes vorstellen!