Accéder et capturer une page web via un tunnel SSH
Ce guide explique comment consulter depuis une autre machine un service web qui n'écoute que sur l'interface locale d'un serveur, vérifier son accès, en faire une capture d'écran puis envoyer cette capture dans Telegram avec OpenClaw.
L'exemple utilise l'application AI Tester de Hermes sur la machine tas. Le service est publié uniquement sur tas:127.0.0.1:5000 : il n'est donc pas directement accessible depuis le réseau.
Dernière vérification : 17 juillet 2026.
Principe
Le tunnel local SSH suit ce trajet :
Chromium ou curl
→ client:127.0.0.1:15000
→ tunnel SSH
→ tas:127.0.0.1:5000
Le port 15000 est le port d'entrée choisi sur la machine cliente. La destination 127.0.0.1:5000 est interprétée depuis le serveur SSH tas.
Prérequis
Sur la machine cliente :
- un accès SSH par clé au compte
loic@tas; curlpour vérifier la réponse HTTP ;- Google Chrome ou Chromium pour produire la capture ;
- OpenClaw configuré pour Telegram si la capture doit être envoyée par la CLI.
Le service doit déjà répondre sur tas:127.0.0.1:5000.
Ouvrir le tunnel SSH
Dans un premier terminal sur la machine cliente :
ssh \
-N \
-o ExitOnForwardFailure=yes \
-L 127.0.0.1:15000:127.0.0.1:5000 \
loic@tas
La commande reste au premier plan pendant toute l'utilisation du tunnel.
Signification des paramètres :
-N: ne lance aucune commande distante ;-L: crée une redirection locale ;127.0.0.1:15000: adresse et port d'entrée sur la machine cliente ;127.0.0.1:5000: service de destination vu depuistas;ExitOnForwardFailure=yes: arrête immédiatement SSH si le tunnel ne peut pas être créé.
Si la clé n'est pas sélectionnée automatiquement, préciser son chemin :
ssh \
-i ~/.ssh/id_rsa_user \
-N \
-o ExitOnForwardFailure=yes \
-L 127.0.0.1:15000:127.0.0.1:5000 \
loic@tas
Le préfixe local 127.0.0.1: empêche les autres machines du réseau d'utiliser ce tunnel.
Vérifier l'accès HTTP
Dans un second terminal sur la machine cliente :
curl --fail --show-error \
-o /dev/null \
-w 'HTTP %{http_code} | %{content_type}\n' \
http://127.0.0.1:15000/
Réponse attendue :
HTTP 200 | text/html; charset=utf-8
Pour ouvrir la page manuellement, utiliser dans le navigateur de la machine cliente :
http://127.0.0.1:15000/
Capturer la page avec Chromium
Avec Google Chrome :
google-chrome \
--headless \
--disable-gpu \
--screenshot="$PWD/hermes-ai-tester-home.png" \
--window-size=1440,1100 \
http://127.0.0.1:15000/
Avec Chromium, remplacer simplement google-chrome par chromium ou chromium-browser selon la distribution.
Vérifier ensuite le fichier :
file "$PWD/hermes-ai-tester-home.png"
Envoyer la capture dans Telegram avec OpenClaw
Remplacer IDENTIFIANT_DU_CHAT par l'identifiant du chat Telegram destinataire :
openclaw message send \
--channel telegram \
--target 'IDENTIFIANT_DU_CHAT' \
--message 'Capture de la page d’accueil AI Tester via tunnel SSH.' \
--media "$PWD/hermes-ai-tester-home.png"
Cette commande envoie un fichier existant. Elle ne lance pas de modèle de langage.
Pour vérifier la commande sans envoyer de message :
openclaw message send \
--dry-run \
--channel telegram \
--target 'IDENTIFIANT_DU_CHAT' \
--message 'Capture de test.' \
--media "$PWD/hermes-ai-tester-home.png"
Fermer le tunnel
Revenir dans le premier terminal et presser Ctrl+C. Le port local 15000 est alors libéré.
Vérification facultative :
curl --max-time 2 http://127.0.0.1:15000/
Après fermeture, cette commande doit échouer avec une erreur de connexion.
Dépannage
Le port local 15000 est déjà occupé
Choisir un autre port d'entrée, par exemple 15001, dans la commande SSH et dans toutes les URL locales.
SSH affiche « No route to host »
Vérifier la résolution de tas, sa route réseau, son adresse IP et l'accessibilité du port SSH :
getent hosts tas
ssh -v loic@tas
SSH affiche « Permission denied (publickey) »
Vérifier le compte distant, le chemin de la clé et la présence de sa clé publique dans ~/.ssh/authorized_keys sur tas.
curl renvoie « Connection refused »
Le tunnel peut être établi alors que le service cible ne fonctionne pas. Depuis tas, contrôler directement :
curl -I http://127.0.0.1:5000/
Précautions de sécurité
- conserver l'écoute locale du tunnel sur
127.0.0.1; - ne pas publier directement AI Tester sur Internet ;
- ne pas exposer un serveur Flask/Werkzeug de développement sans authentification ni reverse proxy adapté ;
- vérifier le destinataire avant d'utiliser
openclaw message sendsans--dry-run.
Résumé des commandes
# Terminal 1 : tunnel
ssh -N -o ExitOnForwardFailure=yes \
-L 127.0.0.1:15000:127.0.0.1:5000 loic@tas
# Terminal 2 : test
curl --fail --show-error -o /dev/null \
-w 'HTTP %{http_code} | %{content_type}\n' \
http://127.0.0.1:15000/
# Capture
google-chrome --headless --disable-gpu \
--screenshot="$PWD/hermes-ai-tester-home.png" \
--window-size=1440,1100 \
http://127.0.0.1:15000/
# Envoi Telegram
openclaw message send \
--channel telegram \
--target 'IDENTIFIANT_DU_CHAT' \
--message 'Capture AI Tester via tunnel SSH.' \
--media "$PWD/hermes-ai-tester-home.png"