CARTE MENTALE โ SSH Proxy Transparent
๐ณ Arborescence conceptuelle
SSH PROXY TRANSPARENT
โ
โโ ARCHITECTURE
โ โโ 3 Conteneurs
โ โ โโ Gateway (proxy)
โ โ โโ Dest1 (machine)
โ โ โโ Dest2 (machine)
โ โ
โ โโ Rรฉseau Docker
โ โ โโ 172.30.0.0/24 (privรฉ)
โ โ
โ โโ 2 Niveaux Auth
โ โโ Windows โ Gateway (lab_rsa)
โ โโ Gateway โ Dest (gateway_rsa)
โ
โโ CONFIGURATION
โ โโ Gateway (4 fichiers)
โ โ โโ Dockerfile
โ โ โ โโ Stage builder: Compile sshproxy Go
โ โ โ โโ Stage final: sshd + config
โ โ โ
โ โ โโ sshd_config
โ โ โ โโ ForceCommand: sshproxy-wrapper โญ
โ โ โ
โ โ โโ sshproxy.yaml
โ โ โ โโ Destinations: [dest1, dest2]
โ โ โ โโ Selection: random
โ โ โ โโ Args: "-tt" โญ
โ โ โ
โ โ โโ sshproxy-wrapper.sh
โ โ โโ Lance sshproxy
โ โ
โ โโ Destinations (2 fichiers ร 2)
โ โ โโ Dockerfile (SSH normal)
โ โ โโ sshd_config (SSH normal)
โ โ
โ โโ Orchestration (1 fichier)
โ โ โโ docker-compose.yaml
โ โ
โ โโ Authentification (4 fichiers)
โ โโ lab_rsa (privรฉe)
โ โโ lab_rsa.pub (publique)
โ โโ gateway_rsa (privรฉe)
โ โโ gateway_rsa.pub (publique)
โ
โโ FLUX D'UNE CONNEXION
โ โโ Client Windows
โ โ โโ ssh -i lab_rsa -p 2222 localhost
โ โ
โ โโ Gateway sshd
โ โ โโ Vรฉrifie: lab_rsa.pub en authorized_keys โ
โ โ โโ Exรฉcute: ForceCommand
โ โ
โ โโ sshproxy-wrapper
โ โ โโ Lance: /usr/sbin/sshproxy
โ โ
โ โโ sshproxy
โ โ โโ Lit: sshproxy.yaml
โ โ โโ Choisit: random (dest1 ou dest2)
โ โ โโ Exรฉcute: ssh -tt -i gateway_rsa testuser@DEST
โ โ
โ โโ Destination sshd
โ โ โโ Vรฉrifie: gateway_rsa.pub en authorized_keys โ
โ โ โโ Exรฉcute: shell/commande
โ โ
โ โโ Rรฉsultat retournรฉ ร Windows
โ
โโ LES 3 "MAGIES"
โ โโ Magie 1: ForceCommand
โ โ โโ Intercepts: Toute connexion SSH
โ โ โโ Lance: sshproxy-wrapper
โ โ โโ Effect: Transparence du proxy
โ โ
โ โโ Magie 2: -tt flag
โ โ โโ Alloue: Pseudo-terminal
โ โ โโ Permet: Shell interactif sur dest
โ โ โโ Critรจre: Sans = exit 255 ou freeze
โ โ
โ โโ Magie 3: 2 Clรฉs SSH
โ โโ Layer 1: Windows โ Gateway
โ โโ Layer 2: Gateway โ Dest
โ โโ Effect: Authentification multi-couches
โ
โโ PIรGES รVITรS
โ โโ Permission denied
โ โ โโ Cause: gateway_rsa propriรฉtรฉ root
โ โ โโ Fix: chown testuser /etc/sshproxy/gateway_rsa
โ โ
โ โโ Exit status 255
โ โ โโ Cause: PTY non allouรฉ
โ โ โโ Fix: -tt dans sshproxy.yaml
โ โ
โ โโ Shell freeze
โ โ โโ Cause: Pas de wrapper
โ โ โโ Fix: sshproxy-wrapper.sh
โ โ
โ โโ IPs qui changent
โ โโ Cause: Rรฉseau recrรฉรฉ ร chaque up
โ โโ Fix: subnet fixe + ipv4_address
โ
โโ DOCUMENTATION
โ โโ PLAN_DE_LECTURE.md
โ โ โโ Par oรน commencer?
โ โ
โ โโ SYNTHESE_COMPLETE.md
โ โ โโ Vue d'ensemble
โ โ
โ โโ ELI5_EXPLICATION.md
โ โ โโ Simplifiรฉe
โ โ
โ โโ QUICK_REFERENCE.md
โ โ โโ Diagrammes + checklist
โ โ
โ โโ DOCUMENTATION_COMPLETE.md
โ โ โโ Ligne par ligne
โ โ
โ โโ RESOLUTION_RAPPORT.md
โ โ โโ Debugging
โ โ
โ โโ INDEX_FICHIERS.md
โ โ โโ Rรฉfรฉrence fichiers
โ โ
โ โโ INVENTAIRE.md
โ โ โโ Tous les fichiers
โ โ
โ โโ README.md
โ โ โโ Point d'entrรฉe principal
โ โ
โ โโ CARTE_MENTALE.md (ce fichier)
โ โโ Structures et relations
โ
โโ COMMANDES CLรS
โโ Dรฉmarrage
โ โโ docker compose up -d
โ โโ Attend 2-3 secondes
โ
โโ Tests
โ โโ ssh -p 2222 testuser@localhost 'hostname'
โ โโ echo "hostname" | ssh -p 2222 testuser@localhost
โ โโ for i in {1..5}; do ssh -p 2222 testuser@localhost hostname; done
โ
โโ Debugging
โ โโ docker exec sshproxy-gateway tail -f /tmp/sshproxy-testuser.log
โ โโ docker compose logs -f gateway
โ โโ docker ps
โ
โโ Arrรชt
โโ docker compose down -v
๐ Relation entre fichiers
docker-compose.yaml
โโโ gateway/Dockerfile โโโ Installe gateway/sshd_config
โโโ gateway/sshd_config โโโ ForceCommand โโโ gateway/sshproxy-wrapper
โโโ gateway/sshproxy-wrapper โโโ Exรฉcute โโโ sshproxy
โโโ sshproxy โโโ Lit โโโ gateway/sshproxy.yaml
โโโ gateway/sshproxy.yaml โโโ Utilise โโโ keys/gateway_rsa (privรฉe)
โ
โโโ dest/Dockerfile โโโ Installe dest/sshd_config
โโโ dest/sshd_config โโโ Accepte โโโ keys/gateway_rsa.pub
โโโ Accepte โโโ keys/lab_rsa.pub
Authentification:
gateway/sshd_config โโโ Vรฉrifie โโโ keys/lab_rsa.pub
โโโ Pour โโโ Connexion Windows
๐ Dรฉpendances critiques
Pour fonctionner, vous DEVEZ avoir:
1. docker-compose.yaml
โโ Sans: pas de conteneurs
2. gateway/Dockerfile
โโ Sans: pas de gateway
3. gateway/sshd_config + ForceCommand
โโ Sans: pas d'interception
4. gateway/sshproxy.yaml + "-tt"
โโ Sans: pas d'interactivitรฉ
5. keys/lab_rsa + lab_rsa.pub
โโ Sans: Windows ne peut pas s'authentifier
6. keys/gateway_rsa + gateway_rsa.pub
โโ Sans: Gateway ne peut pas s'authentifier auprรจs des dest
๐ฏ Ordre d'apprentissage recommandรฉ
Semaine 1 (Day 1 - 30 min):
โโ Lire: PLAN_DE_LECTURE.md (5 min)
โโ Lire: SYNTHESE_COMPLETE.md (10 min)
โโ Lire: QUICK_REFERENCE.md (10 min)
โโ Faire: docker compose up -d
โโ Faire: ssh test (5 min)
โโ Result: "รa marche!"
Semaine 1 (Day 2-3 - 1-2 heures):
โโ Lire: DOCUMENTATION_COMPLETE.md (30 min)
โโ Lire: gateway/sshd_config + explications
โโ Lire: gateway/sshproxy.yaml + explications
โโ Lire: Dockerfiles + explications
โโ Faire: Modifier une config (test)
โโ Result: "Je comprends!"
Semaine 2 (Maintenance):
โโ Consulter: INDEX_FICHIERS.md (au besoin)
โโ Dรฉboguer: RESOLUTION_RAPPORT.md
โโ Auditer: logs sshproxy
โโ Result: "Je maรฎtrise!"
๐ก Patterns clรฉs
Pattern 1: ForceCommand Interception
sshd_config: ForceCommand /path/to/script
โ
/path/to/script: Dรฉtecte SSH_ORIGINAL_COMMAND
โ
Script: Exรฉcute sshproxy
โ
sshproxy: Proxifie la commande
โ
Result: Transparent au client
Pattern 2: Multi-layer Auth
Layer 1 (Client โ Gateway):
Client: lab_rsa (privรฉe)
Gateway: lab_rsa.pub (authorized_keys)
Layer 2 (Gateway โ Dest):
Gateway: gateway_rsa (privรฉe)
Dest: gateway_rsa.pub (authorized_keys)
Pattern 3: Multi-stage Docker
Stage 1 (Builder):
- Gros (avec compilateur)
- Compile sshproxy
- Gรฉnรจre binaires
Stage 2 (Final):
- Petit (Debian slim)
- Copie juste les binaires
- Installe runtime deps
๐ฌ Cas d'usage simples
Cas 1: Commande simple
Input: ssh gateway 'ls -la'
Flow: gateway โ sshproxy โ random_dest โ ls -la
Output: /home/testuser contents
Cas 2: Shell interactif
Input: ssh gateway
Flow: gateway โ sshproxy โ random_dest โ bash
Output: testuser@dest1:~$ (prompt interactif)
Cas 3: Scripts
Input: ssh gateway 'for i in 1..3; do date; done'
Flow: gateway โ sshproxy โ random_dest โ script
Output: 3 timestamps
โ
Checklist complรจte
Infrastructure:
โ docker-compose.yaml crรฉรฉ
โ gateway/ directory + 4 fichiers
โ dest/ directory + 2 fichiers
โ keys/ directory + 4 fichiers
Validation:
โ Clรฉs SSH gรฉnรฉrรฉes
โ docker compose build rรฉussit
โ docker compose up -d rรฉussit
โ docker ps affiche 3 conteneurs
Fonctionnalitรฉ:
โ ssh -p 2222 'hostname' retourne dest1 ou dest2
โ Shell interactif fonctionne
โ Round-robin testรฉ (5 tests)
โ Logs sshproxy lisibles
Comprรฉhension:
โ Vous comprendre ForceCommand
โ Vous comprenez -tt flag
โ Vous pouvez modifier une config
โ Vous pouvez dรฉbugger un problรจme