Exposer des services locaux avec un tunnel SSH
Avez-vous déjà été confronté au webhook, et à cette URL que vous devez fournir pour être rappelé sur votre serveur ou pendant le développement sur votre machine... en localhost... ce qui peut être contraignant suivant le service qui n'autorise pas à inscrire 'localhost' dans le champ de saisie ?
Il existe différentes solutions, comme passer par des systèmes comme ngrok ou expose, qui font un proxy HTTP entre leur serveur et votre serveur de développement local, mais ils posent pour moi deux problèmes assez récurrents :
- Le nombre de requêtes gratuites est limité.
- En mode autohébergé, ils peuvent s'avérer difficiles à configurer.
Sachez qu'il est possible de faire exactement la même chose avec une simple redirection de port. Il suffit d'avoir un serveur ayant accès à Internet public avec un serveur SSH
Prérequis
- Avoir un serveur avec une IP publique et un serveur SSH (pour moi, ce sera une Debian avec OpenSSH-server)
Configuration
Par défaut, le port local ne sera accessible que depuis l'intérieur du serveur passerelle lui-même. Nous souhaitons l'exposer
à l'Internet public, il faudra pour cela autoriser le transfert de port dans le fichier de configuration d'OpenSSH /etc/ssh/sshd_config
1GatewayPorts yes
C'est la seule action que nous ayons à faire sur le serveur.
Démarrer le tunnel
1ssh -R remote_addr:remote_port:local_addr:local_port user@passerelle_addr -N
- remote_addrr : Adresse IP du serveur distant
- remote_port : Port distant
- local_addrr : Adresse IP local
- local_port : Port local
- user : Utilisateur à utiliser pour se connecter au serveur
- passerelle_addr : IP à utiliser pour se connecter au serveur