Contexte : faire passer un flux non chiffré (ici une session VNC) dans un tunnel SSH chiffré · Testé sur : client et serveur Linux avec OpenSSH, contrôle avec Wireshark · Dernière vérification : contenu de 2023 non revérifié
Créer une redirection de port locale avec SSH : un port ouvert sur le poste client est relayé, à travers une connexion SSH chiffrée, vers une machine de destination. Un protocole qui circule en clair, comme VNC, devient ainsi illisible pour qui écoute le réseau. On le vérifie ensuite avec Wireshark.
Adresses utilisées dans l'exemple :
| Rôle | Adresse |
|---|---|
| Serveur SSH (point d'entrée du tunnel) | 172.16.13.137 |
| Destination (serveur VNC) | 172.16.13.1, port 5901 |
ssh -L [IP_LOCALE:]PORT_LOCAL:DESTINATION:PORT_DESTINATION [UTILISATEUR@]SERVEUR_SSH
PORT_LOCAL : port ouvert sur le poste local, par défaut sur 127.0.0.1.DESTINATION:PORT_DESTINATION : machine et port à atteindre, vus depuis le serveur SSH.SERVEUR_SSH : machine qui reçoit la connexion SSH et relaie le trafic.Exemple : tout ce qui est envoyé sur le port local 5000 est relayé par 172.16.13.137 vers le port 5901 de 172.16.13.1.
ssh -L 5000:172.16.13.1:5901 -N -f utilisateur@172.16.13.137
-N : n'exécute aucune commande sur le serveur, la connexion sert uniquement au tunnel.-f : passe SSH en arrière-plan une fois la connexion établie.Dans notre cas, on garde le même numéro de port des deux côtés et on se passe de -f, pour garder la session au premier plan et pouvoir la fermer d'un simple Ctrl+C :
ssh -L 5901:172.16.13.1:5901 utilisateur@172.16.13.137

Connectez le client VNC à 127.0.0.1:5901 (ou localhost:5901) : la session VNC passe par le tunnel SSH jusqu'au serveur 172.16.13.1.
Lancez une capture Wireshark sur l'interface réseau du poste local. On voit l'ouverture de la session SSH vers le serveur, puis uniquement des paquets SSH chiffrés : le contenu de la session VNC n'apparaît pas.


Dans la session VNC ouverte à travers le tunnel, lancez Firefox et visitez un site internet. Wireshark, sur le poste local, ne voit aucune trace de cette navigation : elle reste encapsulée dans le tunnel.

Wireshark ne voit pas la navigation : le trafic passe bien par le tunnel SSH chiffré.
| Symptôme | Cause probable | Solution |
|---|---|---|
bind [127.0.0.1]:5901: Address already in use |
Le port local est déjà utilisé (un autre tunnel, un serveur VNC local) | Choisissez un autre port local, par exemple -L 5902:172.16.13.1:5901, et connectez-vous à 127.0.0.1:5902 |
| Le client VNC n'obtient pas de réponse | La destination n'est pas joignable depuis le serveur SSH, ou la redirection est interdite | Testez la destination depuis le serveur SSH ; vérifiez que AllowTcpForwarding n'est pas à no dans /etc/ssh/sshd_config |
Un tunnel lancé avec -f reste actif |
Le processus SSH tourne en arrière-plan | Retrouvez-le avec pgrep -af "ssh -L" et arrêtez-le avec kill |