Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| linux:autossh [06-05-2026 17:11] – créée edmc73 | linux:autossh [06-05-2026 18:56] (Version actuelle) – [Le cas avec Docker] edmc73 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== autossh ====== | ====== autossh ====== | ||
| - | Permet | + | **autossh** permet |
| + | |||
| + | Installer **autossh** | ||
| + | apt install autossh | ||
| + | |||
| + | |||
| + | Comme le dit le **man autossh** il est préférable d' | ||
| + | |||
| + | Exemple: J'ai besoin d'un accès à une base de données distante en local | ||
| + | |||
| + | La commande ssh serait | ||
| + | ssh -L 3307: | ||
| + | |||
| + | La commande autossh serait | ||
| + | autossh -M 0 -q -f -N -oServerAliveInterval=60 -oServerAliveCountMax=3 -L 3307: | ||
| + | |||
| + | ===== Lancement automatique ===== | ||
| + | Pour que cette connexion se lance au démarrage de la machine, utiliser **systemd** | ||
| + | |||
| + | ==== Pour un tunnel ==== | ||
| + | |||
| + | Créez un fichier de configuration pour votre tunnel (remplacez mon-tunnel par le nom de votre choix) : | ||
| + | |||
| + | vi / | ||
| + | |||
| + | Copiez et adaptez le contenu suivant : | ||
| + | |||
| + | <code config> | ||
| + | [Unit] | ||
| + | Description=AutoSSH Tunnel Service | ||
| + | After=network-online.target | ||
| + | StartLimitIntervalSec=300 | ||
| + | StartLimitBurst=5 | ||
| + | |||
| + | [Service] | ||
| + | Environment=" | ||
| + | User=votre_utilisateur | ||
| + | # -M 0 désactive le monitoring d' | ||
| + | ExecStart=/ | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | </ | ||
| + | |||
| + | Exécutez ces commandes pour prendre en compte le nouveau service et l' | ||
| + | |||
| + | systemctl daemon-reload | ||
| + | systemctl enable autossh-tunnel.service | ||
| + | systemctl start autossh-tunnel.service | ||
| + | |||
| + | Points clés à vérifier : | ||
| + | * Authentification par clé : Assurez-vous que votre clé SSH n'a pas de passphrase, sinon le service bloquera au démarrage. | ||
| + | * Droits : Le dossier .ssh et la clé privée doivent appartenir à l' | ||
| + | * Logs : En cas de problème, utilisez '' | ||
| + | |||
| + | ==== Pour plusieurs tunnels ==== | ||
| + | |||
| + | Pour gérer plusieurs tunnels proprement sans multiplier les fichiers manuellement, | ||
| + | |||
| + | === Créer un template de service === | ||
| + | Créez un fichier générique avec un @ dans le nom : | ||
| + | |||
| + | vi / | ||
| + | |||
| + | === Configurer le template === | ||
| + | Utilisez la variable '' | ||
| + | |||
| + | < | ||
| + | [Unit] | ||
| + | Description=AutoSSH tunnel pour %i | ||
| + | After=network-online.target | ||
| + | StartLimitIntervalSec=300 | ||
| + | StartLimitBurst=5 | ||
| + | |||
| + | [Service] | ||
| + | EnvironmentFile=/ | ||
| + | ExecStart=/ | ||
| + | Restart=always | ||
| + | RestartSec=10 | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | </ | ||
| + | |||
| + | === Créer les fichiers de configuration === | ||
| + | Pour chaque tunnel, créez un fichier d' | ||
| + | |||
| + | Fichier ''/ | ||
| + | |||
| + | < | ||
| + | SSH_OPTIONS=" | ||
| + | TUNNEL_CONFIG=" | ||
| + | REMOTE_HOST=" | ||
| + | </ | ||
| + | |||
| + | Fichier ''/ | ||
| + | |||
| + | < | ||
| + | SSH_OPTIONS=" | ||
| + | TUNNEL_CONFIG=" | ||
| + | REMOTE_HOST=" | ||
| + | </ | ||
| + | |||
| + | === Activer chaque tunnel individuellement === | ||
| + | Il suffit maintenant d' | ||
| + | |||
| + | systemctl daemon-reload | ||
| + | |||
| + | Activer le tunnel Web | ||
| + | systemctl enable --now autossh@web | ||
| + | |||
| + | Activer le tunnel DB | ||
| + | systemctl enable --now autossh@db | ||
| + | |||
| + | Avantages : | ||
| + | |||
| + | Maintenance simplifiée : Un seul fichier service pour tous vos tunnels. | ||
| + | |||
| + | Isolation : Vous pouvez redémarrer autossh@web sans couper autossh@db. | ||
| + | |||
| + | Clarté : La commande systemctl status " | ||
| + | |||
| + | ==== Le cas avec Docker ==== | ||
| + | |||
| + | Pour que votre container docker puisse accéder au port de son hôte, il faut modifier les options pour le tunnel | ||
| + | |||
| + | Changer ça | ||
| + | < | ||
| + | -L 33060: | ||
| + | </ | ||
| + | par ça | ||
| + | < | ||
| + | -L 172.17.0.1: | ||
| + | </ | ||
| + | |||
| + | L'ip 172.17.0.1 est l'ip de l' | ||
| + | |||
| + | Vérifier | ||
| + | < | ||
| + | # ss -ln4t | ||
| + | State | ||
| + | LISTEN | ||
| + | |||
| + | # docker exec -ti myapp sh | ||
| + | /app # ping 172.17.0.1 | ||
| + | PING 172.17.0.1 (172.17.0.1): | ||
| + | 64 bytes from 172.17.0.1: seq=0 ttl=64 time=0.073 ms | ||
| + | 64 bytes from 172.17.0.1: seq=1 ttl=64 time=0.069 ms | ||
| + | ^C | ||
| + | --- 172.17.0.1 ping statistics --- | ||
| + | 2 packets transmitted, | ||
| + | round-trip min/avg/max = 0.069/ | ||
| + | | ||
| + | /app # mysql -h 172.17.0.1 -P 33060 -u user -p | ||
| + | |||
| + | </ | ||