Outils pour utilisateurs

Outils du site


Panneau latéral

linux:autossh (lu 2736 fois)

**Ceci est une ancienne révision du document !**

autossh

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 :

[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

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 :

[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

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 :

SSH_OPTIONS="-o 'ServerAliveInterval 30' -o 'ServerAliveCountMax 3'"
TUNNEL_CONFIG="-L 8080:localhost:80"
REMOTE_HOST="user@serveur-web.com"

Fichier /etc/default/autossh-db :

SSH_OPTIONS="-o 'ServerAliveInterval 30' -o 'ServerAliveCountMax 3'"
TUNNEL_CONFIG="-L 5432:localhost:5432"
REMOTE_HOST="user@serveur-db.com"

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.

linux/autossh.1778092777.txt.gz · Dernière modification : de edmc73