Réseau
Debian
2 min
Mis en ligne le 05/01/2023

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 :

  1. Le nombre de requêtes gratuites est limité.
  2. 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
Ludovic Meurot

Développeur web, PHP Laravel, interessé par l'admin sys et du réseau.