Aller au contenu

Accéder et capturer une page web via un tunnel SSH

De Loic Wiki


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 ;
  • curl pour 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 depuis tas ;
  • 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 send sans --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"