Outils pour utilisateurs

Outils du site


linux:autossh (lu 2743 fois)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
linux:autossh [06-05-2026 17:11] – créée edmc73linux:autossh [06-05-2026 18:56] (Version actuelle) – [Le cas avec Docker] edmc73
Ligne 1: Ligne 1:
 ====== autossh ====== ====== autossh ======
  
-Permet de garder des tunnels ssh ouvert et de les remonter en cas de déconnexion+**autossh** permet de garder des tunnels ssh ouvert et de les remonter en cas de déconnexion
 + 
 +Installer **autossh** 
 +  apt install autossh 
 + 
 + 
 +Comme le dit le **man autossh** il est préférable d'utiliser les options **ServerAliveInternal** et **ServerAliveCountMax** plutôt que d'utiliser le echo port pour le monitoring, je vais donc écrire les commandes dans ce contexte. 
 + 
 +Exemple: J'ai besoin d'un accès à une base de données distante en local 
 + 
 +La commande ssh serait 
 +  ssh -L 3307:localhost:3306 username@toto-public.com 
 + 
 +La commande autossh serait 
 +  autossh -M 0 -q -f -N -oServerAliveInterval=60 -oServerAliveCountMax=3 -L 3307:localhost:3306 username@toto-public.com 
 + 
 +===== 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 /etc/systemd/system/autossh-tunnel.service 
 + 
 +Copiez et adaptez le contenu suivant : 
 + 
 +<code config> 
 +[Unit] 
 +Description=AutoSSH Tunnel Service 
 +After=network-online.target 
 +StartLimitIntervalSec=300 
 +StartLimitBurst=5 
 + 
 +[Service] 
 +Environment="AUTOSSH_GATETIME=0" 
 +User=votre_utilisateur 
 +# -M 0 désactive le monitoring d'autossh pour laisser SSH gérer ses propres timeouts 
 +ExecStart=/usr/bin/autossh -M 0 -N -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -L 8080:localhost:80 user@remote-server -i /home/votre_utilisateur/.ssh/id_rsa 
 + 
 +[Install] 
 +WantedBy=multi-user.target 
 +</code> 
 + 
 +Exécutez ces commandes pour prendre en compte le nouveau service et l'activer au démarrage : 
 + 
 +  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'utilisateur défini dans le fichier service. 
 +  * Logs : En cas de problème, utilisez ''journalctl -u autossh-tunnel.service'' pour diagnostiquer. 
 + 
 +==== Pour plusieurs tunnels ==== 
 + 
 +Pour gérer plusieurs tunnels proprement sans multiplier les fichiers manuellement, la meilleure pratique est d'utiliser les fichiers de service instanciés (templates) de systemd. 
 + 
 +=== Créer un template de service === 
 +Créez un fichier générique avec un @ dans le nom : 
 + 
 +  vi /etc/systemd/system/autossh@.service 
 + 
 +=== Configurer le template === 
 +Utilisez la variable ''%i'' qui sera remplacée par le nom du fichier de configuration que nous allons créer plus loin : 
 + 
 +<code> 
 +[Unit] 
 +Description=AutoSSH tunnel pour %i 
 +After=network-online.target 
 +StartLimitIntervalSec=300 
 +StartLimitBurst=5 
 + 
 +[Service] 
 +EnvironmentFile=/etc/default/autossh-%i 
 +ExecStart=/usr/bin/autossh -M 0 -N $SSH_OPTIONS $TUNNEL_CONFIG $REMOTE_HOST 
 +Restart=always 
 +RestartSec=10 
 + 
 +[Install] 
 +WantedBy=multi-user.target 
 +</code> 
 + 
 +=== Créer les fichiers de configuration === 
 +Pour chaque tunnel, créez un fichier d'environnement spécifique. Par exemple, pour un tunnel "Web" et un tunnel "DB"
 + 
 +Fichier ''/etc/default/autossh-web''
 + 
 +<code> 
 +SSH_OPTIONS="-o 'ServerAliveInterval 30' -o 'ServerAliveCountMax 3'" 
 +TUNNEL_CONFIG="-L 8080:localhost:80" 
 +REMOTE_HOST="user@serveur-web.com" 
 +</code> 
 + 
 +Fichier ''/etc/default/autossh-db''
 + 
 +<code> 
 +SSH_OPTIONS="-o 'ServerAliveInterval 30' -o 'ServerAliveCountMax 3'" 
 +TUNNEL_CONFIG="-L 5432:localhost:5432" 
 +REMOTE_HOST="user@serveur-db.com" 
 +</code> 
 + 
 +=== Activer chaque tunnel individuellement === 
 +Il suffit maintenant d'appeler le service en ajoutant le nom défini après l'arobase : 
 + 
 +  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 "autossh*" vous donnera l'état de chaque tunnel distinctement. 
 + 
 +==== 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 
 +<code> 
 +-L 33060:localhost:3306 
 +</code> 
 +par ça 
 +<code> 
 +-L 172.17.0.1:33060:localhost:3306 
 +</code> 
 + 
 +L'ip 172.17.0.1 est l'ip de l'hôte vu par les containers docker 
 + 
 +Vérifier  
 +<code> 
 +# ss -ln4t 
 +State                       Recv-Q                      Send-Q                                             Local Address:Port                                              Peer Address:Port                       
 +LISTEN                      0                           128                                                   172.17.0.1:33060                                                  0.0.0.0:                         
 + 
 +# docker exec -ti myapp sh 
 +/app # ping 172.17.0.1 
 +PING 172.17.0.1 (172.17.0.1): 56 data bytes 
 +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, 2 packets received, 0% packet loss 
 +round-trip min/avg/max = 0.069/0.071/0.073 ms 
 +                     mysql_waitpid              mysqlcheck                 mysqlimport 
 +/app # mysql -h 172.17.0.1 -P 33060 -u user -p 
 + 
 +</code>
linux/autossh.1778087485.txt.gz · Dernière modification : de edmc73