Développer en .NET/SQLServer à distance à l’aide de tunnels SSH

Je travaille actuellement à distance sur de nombreux projets développés en .Net couplés à la technologie SQL Server comme moteur de Base de données. La problématique que j’ai rencontrée a été de pouvoir me connecter aux différentes ressources nécessaires au bon fonctionnement d’une application .NET (SQL Server, Reporting Services etc …) mais aussi au processus livraison sur un serveur distant (Prise en main à distance d’un Windows Server)

Pour répondre à cette problématique j’ai utilisé le tunneling SSH pour pouvoir me connecter à ces différentes ressources à distance. Dans un premier temps nous verrons comment créer un tunnel SSH à l’aide du logiciel Putty et de son interface graphique puis avec l’outil Plink utilisé en CLI (Command Line Interface).

Ensuite nous verrons comment nous connecter à ces différentes ressources dans un environnement de développement.

Putty

Putty est un utilitaire gratuit de connexion SSH pour Windows. Il est téléchargeable à l’adresse suivante :
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Sur le premier écran vous verrez un champ « Host Name (or IP adress) » qu’il faudra remplir avec le nom d’hôte de votre serveur SSH ou alors son IP Publique (dans le cas où vous vous connectez de l’extérieur, en local l’adresse IP locale suffit).

Le port (22) est le port SSH par défaut, il n’a pas de raison de changer si votre serveur SSH est configuré sur le port par défaut.

Capture.PNG

Après avoir configuré votre nom d’hôte, votre port et sélectionné le « Connection Type » SSH naviguez vers l’écran « Connection » de l’arborescence à gauche.

Capture2.PNG

Un conseil, cochez dans cet écran la case « Enable TCP Keepalives » et spécifiez une valeur pour « seconds between keepalives » cela vous évitera les problèmes de timeout en cas d’inactivité sur le tunnel SSH.

Rendez-vous ensuite dans la catégorie « SSH » puis «Tunnels »

Capture3.PNG

Vous arrivez alors sur l’écran le plus important pour la configuration de votre tunnel. C’est sur cet écran que vous allez configurer votre tunnel SSH en lui-même.

Capture4.PNG

Je vais m’arrêter ici sur les paramètres à renseigner sur cet écran. Il est essentiel de les comprendre pour configurer son / ses tunnel(s) SSH.

Source port : C’est le port local vers lequel vous redirigerez les paquets

Destination : C’est l’adresse IP locale et le port de la machine avec laquelle vous souhaitez communiquer

Le reste des paramètres peuvent rester par défaut dans la majorité des cas.

Pour exemple :
Je souhaite me connecter à un SQL Server distant ayant pour ip locale 192.168.1.138 et pour port le port par défaut de Sql Server (e.g 1433). Mon port local 15000 est ouvert et libre (aucune application ne l’utilise) je vais alors renseigner les paramètres de la manière suivante :

Source port : 15000

Destination : 192.168.1.138:1433

Autres paramètres : Local et Auto

Cliquez sur «Add» pour rajouter la configuration du tunnel dans la liste « Forwarded ports »
Répétez l’action pour chacun des tunnels qui vous est nécessaire.
Vous devriez vous retrouver avec une configuration telle que dans la capture d’écran suivante :

Capture5.PNG

Cliquez ensuite sur « Open » ce qui aura pour effet d’ouvrir un terminal vous demandant vos informations de connexion au serveur SSH.

Capture6.PNG

Une fois l’authentification approuvée par le serveur SSH vous arrivez alors sur un invité de commande.

Capture7.PNG

Votre tunnel est désormais en place et opérationnel.

Pour fermer le tunnel, exécutez la commande « exit » ou fermez la fenêtre Putty à tout moment.

Vous avez vu comment vous connecter à l’aide de Putty et de son interface graphique. Cependant il existe la possibilité de se connecter à l’aide d’un batch et de l’exécutable Plink.

Plink

Plink est un programme simple démuni d’interface graphique que l’on peut appeler en invité de commande. Il est tout comme Putty gratuit. Vous pouvez l’obtenir à l’adresse suivante :
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Cette solution est moins chronophage que Putty lorsque vous avez besoin de créer de manière répétée le même tunnel car elle évite de passer par une interface graphique.

Le principe de tunnel est exactement le même que lorsque vous créez ce dernier avec Putty, c’est sa mise en œuvre qui sera légèrement différente.

Dans un batch il vous suffira d’appeler le programme plink.exe avec les bons arguments pour créer votre tunnel SSH de manière simple et efficace.

Un autre avantage d’utiliser Plink est que vous avez la possibilité de spécifier directement dans les arguments votre login et votre mot de passe. Attention tout de même aux risques liés à la sécurité.

La syntaxe d’appel de plink est la suivante :

plink.exe -ssh login@monserveurssh.domaine.fr -pw monMotDePasse -L SourcePort:DestinationIp:DestinationPort

Pour reprendre l’exemple précédent avec Putty, pour réaliser la même connexion SSH sur un SQL Server Distant ayant pour IP 192.168.1.138 et comme port 1433 nous allons appeler plink de manière suivante

plink.exe -ssh login@monserveurssh.domaine.fr -pw monMotDePasse -L 15000:192.168.1.138:1433

Pour cela créez un fichier batch (.bat) sous windows .
Dans la figure ci-dessous 2 tunnels sont créés :
- 192.168.1.138:1433 forwardé sur le port local 15000
- 192.168.1.138:8080 forwardé sur le portal local 8080

@echo on
cd "Outils\Putty"
plink-ssh.exe -ssh login@monserveurssh.mondomaine.fr -pw monMotDePasse -L 15000:192.168.1.138:1433 -L 8080:192.168.1.138:8080
pause

Le lancement du batch procède à la création des deux tunnels sans que les informations de connexion ne soient demandées.

Se connecter aux différentes ressources via SSH

Maintenant que l’on a vu comment créer le tunnel, c’est son utilisation qui nous intéresse.

Dans vos applications ASP.NET

Il vous suffit de changer dans vos fichiers de config (Web.config, AppSettings etc …) toutes les références à vos ressources par les valeurs spécifiées dans le tunnel que vous avez créé précédemment.

Exemple d’un fichier AppSettings

<add name="BDDEntities" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=127.0.0.1;Initial Catalog=BDD;Persist Security Info=True;User ID=sa;Password=pwd;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

Attention, pour les connexions vers SQLServer l’alias localhost ne fonctionne pas, il faut passer par l’adresse de loopback 127.0.0.1.

Se connecter à SQL Server via Sql Server Management Studio

Rappel : Attention, pour les connexions vers SQLServer l’alias localhost ne fonctionne pas, il faut passer par l’adresse de loopback 127.0.0.1.

Pour se connecter à un SQL Server via tunnel SSH il faut spécifier comme adresse 127.0.0.1. Si le port local utilisé est 1433 il n’est pas à spécifier dans le cas contraire le server name devra être suivi d’une virgule et du numéro de port.

Exemple : 127.0.0.1, 15000 si votre port local est le 15000

Dans la figure ci-dessous, on se connecte à un SQL Server distant forwardé sur notre port local 1433

Capture9.PNG

Se connecter à distance sur un Windows Server

Le port par défaut de la prise en main à distance est 3389, il vous suffira de configurer votre tunnel ssh de la manière suivante par exemple :

22222:192.168.1.138:3389

Puis dans l’outil de prise en main à distance :

Capture10.PNG

Ports fréquements utilisés

Pour finir voici un récapitulatif non-exhaustif des ports par défaut utilisés en environnement Microsoft :

SQL Server : 1433

Prise en main à distance Windows Server : 3389

Reporting Services : 8080

Microsoft Dynamics : 5555

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.