Tunnel SSH Inversé — Sync VPS→PC avec IP Dynamique¶
Contexte¶
Le script sync_to_pc.sh du workflow shared/references/hermes-workflow-developpement permet au VPS de synchroniser le code directement sur le PC local via SSH. Mais le PC est derrière un routeur avec une IP publique dynamique — le VPS ne peut pas initier une connexion vers le PC de façon fiable.
Solution retenue : tunnel SSH inversé via autossh. Le PC initie lui-même le tunnel vers le VPS au démarrage, créant un point d'entrée stable côté VPS (localhost:2222).
Principe¶
PC (IP inconnue, derrière NAT)
↓ ssh -R 2222:localhost:22 kanmaber@178.105.46.57
VPS (IP fixe)
← tunnel ouvert
↓ ssh -p 2222 kanmaber@localhost (pour atteindre le PC)
Le PC crée le tunnel au démarrage → le VPS peut ensuite s'y connecter via localhost:2222.
L'IP publique du PC n'intervient jamais.
Utilisation manuelle (sans service systemd)¶
Pour ouvrir le tunnel ponctuellement, sans automatisation, lancer cette commande dans un terminal WSL et la laisser tourner :
autossh -M 0 -N \
-o "ServerAliveInterval=30" \
-o "ServerAliveCountMax=3" \
-R 2222:localhost:22 \
-i ~/.ssh/kanmaber_hetzner \
kanmaber@178.105.46.57
Prérequis à faire une seule fois avant la première utilisation :
# 1. SSH server dans WSL
sudo apt install openssh-server -y
sudo service ssh start
# 2. Clé publique du VPS autorisée sur le PC
ssh -i ~/.ssh/kanmaber_hetzner kanmaber@178.105.46.57 "cat ~/.ssh/id_ed25519.pub"
echo "COLLE_LA_CLE_ICI" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Depuis le VPS, tester la connexion retour :
ssh -p 2222 kanmaber@localhost
Le tunnel tombe dès que le terminal WSL est fermé. Pour une version permanente, utiliser le service systemd (voir section "Mise en place" ci-dessous).
Mise en place¶
Étape 1 — SSH server sur WSL¶
sudo apt install openssh-server -y
sudo service ssh start
sudo service ssh status
Étape 2 — Autoriser la clé SSH du VPS sur le PC¶
# Récupérer la clé publique du VPS
ssh -i ~/.ssh/kanmaber_hetzner kanmaber@178.105.46.57 "cat ~/.ssh/id_ed25519.pub"
# Ajouter dans WSL
echo "CLE_PUBLIQUE_VPS" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Étape 3 — Installer autossh¶
sudo apt install autossh -y
Étape 4 — Service systemd (tunnel au démarrage WSL)¶
sudo tee /etc/systemd/system/reverse-tunnel.service << 'EOF'
[Unit]
Description=Reverse SSH Tunnel vers VPS
After=network.target
[Service]
User=kanmaber
ExecStart=/usr/bin/autossh -M 0 -N \
-o "ServerAliveInterval=30" \
-o "ServerAliveCountMax=3" \
-o "ExitOnForwardFailure=yes" \
-R 2222:localhost:22 \
-i /home/kanmaber/.ssh/kanmaber_hetzner \
kanmaber@178.105.46.57
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable reverse-tunnel
sudo systemctl start reverse-tunnel
Étape 5 — Mettre à jour sync_to_pc.sh sur le VPS¶
PC_USER="kanmaber"
PC_HOST="localhost"
PC_SSH_PORT="2222"
PC_PROJECT_DIR="/home/kanmaber/projets/PsychoEnLigneV2"
Modifier la commande SSH dans le script :
ssh -p "$PC_SSH_PORT" "$PC_USER@$PC_HOST" "cd $PC_PROJECT_DIR && git pull origin main"
Comportement selon l'état du PC¶
| Situation | Comportement |
|---|---|
| PC allumé | Tunnel actif → VPS sync via localhost:2222 directement |
| PC éteint | Tunnel absent → VPS pousse sur GitHub, flag .sync_pending créé |
| PC se rallume | autossh rétablit le tunnel → cron détecte .sync_pending → sync auto |
Décision / Conclusion¶
L'IP dynamique rend impossible toute connexion directe VPS→PC. Le tunnel SSH inversé est la solution retenue car :
- Ne nécessite aucune configuration routeur (pas de port forwarding)
- Fonctionne derrière n'importe quel NAT
- autossh maintient le tunnel en vie automatiquement
- Compatible avec le mécanisme de flag .sync_pending de sync_to_pc.sh
À faire¶
- [ ] Installer
openssh-serverdans WSL - [ ] Récupérer la clé publique du VPS et l'ajouter dans
~/.ssh/authorized_keys - [ ] Installer
autossh+ créer le service systemdreverse-tunnel.service - [ ] Mettre à jour
sync_to_pc.shsur le VPS :PC_HOST=localhost,PC_SSH_PORT=2222 - [ ] Configurer le cron VPS pour
sync_to_pc.sh(toutes les 30 min) - [ ] Tester le tunnel :
ssh -p 2222 kanmaber@localhostdepuis le VPS
Liens connexes¶
- shared/references/hermes-workflow-developpement — workflow global PC ↔ VPS via Hermes
- PsychoEnLigneV2/architecture/deploiement-sync-psycho-hermes — scripts deploy.sh, sync.sh, sync_to_pc.sh
- shared/references/ssh-scp-commandes-distantes — référence SSH & SCP commandes distantes
- shared/architecture/hermes-acces-vps-hetzner — accès VPS Hetzner, ports, services actifs