sshuttle est un outil permettant de rediriger du trafic réseau à travers une session SSH, de manière transparente, sans installer de logiciel sur la machine distante et sans droits root côté serveur.
C’est l’un des outils les plus pratiques pour le pivoting en test d’intrusion, car il permet d’exposer un réseau interne complet à vos outils locaux.
Après mon article consacré à Dirb, voici un autre outil fort utile dans le cadre d’un CTF :).
Dans cet article, vous trouverez :
- une explication détaillée du fonctionnement interne ;
- les commandes essentielles et avancées ;
- plusieurs scénarios complets de pivoting ;
- des conseils pratiques d’OPSEC ;
- des alternatives selon les situations ;
- une cheat-sheet exhaustive.

1. Pourquoi sshuttle est utilisé en pentest
sshuttle est particulièrement efficace lorsque :
- vous avez compromis une machine Linux dans un réseau interne ;
- vous disposez d’un accès SSH sur un bastion interne ;
- vous devez analyser un Active Directory ou plusieurs VLAN internes ;
- le client ne permet pas d’installer un VPN (OpenVPN, WireGuard) ;
- vous souhaitez utiliser vos outils locaux sans copier d’outils sur la cible.
En pratique, sshuttle permet de faire fonctionner depuis votre machine :
- Nmap ;
- CrackMapExec ;
- BloodHound / SharpHound ;
- Kerbrute ;
- Hydra ;
- BurpSuite, curl, nikto ;
- tous les outils réseau classiques.
À partir d’un simple accès SSH utilisateur, vous obtenez une visibilité réseau très large, ce qui accélère considérablement la phase de reconnaissance et de mouvement latéral.
2. Installation
2.1. Kali Linux / Debian / Ubuntu
sudo apt update
sudo apt install sshuttle
2.2. Autres distributions
- Arch Linux :
sudo pacman -S sshuttle - Fedora :
sudo dnf install sshuttle - openSUSE :
sudo zypper install sshuttle
2.3. Installation via pip
Si aucun paquet n’est disponible :
sudo pip install sshuttle
3. Fonctionnement technique détaillé
3.1. Rôle côté client
sshuttle configure des règles locales (iptables ou nfqueue selon les versions) pour intercepter les paquets destinés à certains sous-réseaux.
Ensuite :
- les flux TCP sont interceptés ;
- un proxy Python local les reçoit ;
- ils sont encapsulés dans la session SSH ;
- le script sshuttle côté serveur les exécute et retourne les réponses.
Cela signifie que tous vos outils locaux se comportent comme si vous étiez directement sur le réseau interne.
3.2. Rôle côté serveur
- sshuttle envoie automatiquement un script Python temporaire via SSH ;
- le script recrée les connexions TCP vers les hôtes internes ;
- il renvoie les flux via SSH ;
- aucune installation permanente ni droit root nécessaire.
3.3. Ce que sshuttle n’est pas
- pas un VPN complet L3/L4 ;
- ne transporte pas l’intégralité des paquets (pas d’UDP généralisé) ;
- pas adapté aux très gros volumes (SMB massifs, transferts lourds).
4. Commandes essentielles
4.1. Accéder à un réseau interne :
sudo sshuttle -r user@bastion 10.10.0.0/16
4.2. Accéder à plusieurs réseaux :
sudo sshuttle -r user@bastion 10.10.0.0/16 172.16.0.0/16
4.3. Full tunnel (tout le trafic passe par SSH) :
sudo sshuttle -r user@bastion 0.0.0.0/0
4.4. Full tunnel sans casser votre LAN local :
sudo sshuttle -r user@bastion 0.0.0.0/0 -x 192.168.1.0/24
4.5. Ajouter la résolution DNS interne :
sudo sshuttle -r user@bastion 10.10.0.0/16 --dns
4.6. Port SSH différent ou clé spécifique :
sudo sshuttle -r user@bastion:2222 10.10.0.0/16 -e "ssh -i ~/.ssh/id_rsa"
4.7. Auto-découverte des réseaux :
sudo sshuttle -r user@bastion -N
4.8. Lancer sshuttle en daemon :
sudo sshuttle -r user@bastion 10.10.0.0/16 -D
5. Scénarios concrets de pentest
5.1. Pivot depuis un serveur Linux compromis vers un réseau AD
Contexte :
- Accès SSH sur une machine Linux interne.
- Réseau Active Directory :
10.20.0.0/16.
Tunnel :
sudo sshuttle -r user@srv-app01 10.20.0.0/16 --dns
Exploitation :
nmap -sV 10.20.0.0/24
crackmapexec smb 10.20.0.0/24
bloodhound-python -d CORP.LOCAL -c All
5.2. Bastion SSH exposé sur Internet
Tunnel :
sudo sshuttle -r pentest@jump.corp 172.16.0.0/16 --dns
Scan :
nmap 172.16.50.10
5.3. Pivot multi-sauts via ProxyJump
Configuration SSH (~/.ssh/config) :
Host jump2
ProxyJump jump1
User pentest
Tunnel :
sudo sshuttle -r jump2 10.50.0.0/16 --dns
sshuttle utilise automatiquement la chaîne de sauts ProxyJump, permettant des tunnels complexes sans config additionnelle.
6. Points d’attention et OPSEC
- sshuttle rend votre activité très visible côté bastion (trafic constant sur SSH).
- Les scans Nmap agressifs via le tunnel déclenchent facilement les alertes SOC.
- Les flux volumineux (SMB, transferts) peuvent saturer le tunnel.
- La perte du tunnel coupe tous vos scans/outils.
Conseils :
- préférez les scans lents :
-T2ou-T1; - ne faites pas de full-tunnel inutilement ;
- limitez les plages scannées ;
- assurez-vous de la stabilité de la connexion SSH.
7. Alternatives selon les besoins
ligolo-ng
Idéal en red team : rapide, discret, pensée pour les pivots complexes. Nécessite un agent sur la cible.
chisel
Tunnel TCP/UDP rapide. Parfait si vous pouvez déposer un binaire minimal.
ssh -L / ssh -D
Bon pour un ou deux ports seulement, moins pratique pour des réseaux entiers.
OpenVPN / WireGuard
Parfait pour des connexions stables avec un serveur sous contrôle, mais nécessite des privilèges sur la cible.
8. Cheat-sheet complète
Accéder à un réseau interne :
sudo sshuttle -r user@host 10.10.0.0/16
Accéder à plusieurs réseaux :
sudo sshuttle -r user@host 10.10.0.0/16 172.16.0.0/16
Full tunnel :
sudo sshuttle -r user@host 0.0.0.0/0
Full tunnel + exclusion LAN :
sudo sshuttle -r user@host 0.0.0.0/0 -x 192.168.1.0/24
Support DNS interne :
sudo sshuttle -r user@host 10.10.0.0/16 --dns
Port SSH custom + clé :
sudo sshuttle -r user@host:2222 10.10.0.0/16 -e "ssh -i ~/.ssh/id_rsa"
Auto-découverte des réseaux :
sudo sshuttle -r user@host -N
Daemon mode :
sudo sshuttle -r user@host 10.10.0.0/16 -D
Conclusion
sshuttle est un outil de pivot réseau extrêmement efficace dès que vous disposez d’un accès SSH utilisateur. Il permet d’exposer rapidement et proprement un réseau interne complet à vos outils locaux, sans installation côté serveur.
Pour du pentest interne, des opérations red team ou du mouvement latéral basé sur un bastion SSH, il reste un classique incontournable.