Utiliser WSL2 dans un environnement professionnel

| 3 minutes, 21 secondes

En 2019, Microsoft opère une vraie révolution dans le monde de l'informatique grand public en publiant la version 2 de son logiciel WSL pour Windows 10. Celle-ci permet en effet d'embarquer le noyau Linux dans l'OS propriétaire intégré à la quasi-totalité des ordinateurs vendus dans le monde, ouvrant ainsi la voie à de nombreux projets. Si comme moi vous utilisez WSL2 dans un contexte professionnel (en remplacement de l'honnorable Putty par exemple), vous serez peut-être frustré par quelques points de détail qui gâchent la vie au quotidien, comme l'impossibilité de faire un ping ou d'utiliser des serveurs DNS et domaines de recherche locaux, ou l'impossibilité de capturer les liens ssh://. Voici les solutions, testées et validées pour Debian et Ubuntu.

ping: socket: Operation not permitted

ping-socket-operartion-not-permitted

Si vous ne parvenez pas à effectuer un ping depuis votre environnement WSL2, c'est probablement parce que la capacité cap_net_raw n'est pas permise (pour en savoir plus sur les capacités sous Linux, jetez un œil à la documentation Connect dédiée). Pour y remédier, éxecutez simplement la commande suivante (vous devrez saisir votre mot de passe) :

sudo setcap cap_net_raw+p /bin/ping

Résolution de noms via serveurs DNS privés et domaine de recherche implicites

Qui dit environnement informatique professionnel dit bien souvent domaine et/ou serveur DNS privés. Malheureusement, les machines tournant sous WSL2 n'héritent pas de la configuration de la carte réseau hôte. Impossible alors de contacter votre serveur interne avec son petit nom car vous interrogez un serveur public et que l'OS ne connait pas les domaines de recherche implicite :

NameorServiceNotKnown

Pour personnaliser les serveurs que vous interrogez et indiquer un ou plusieurs domaines de recherche implicite, il faut créer le fichier /etc/resolv.conf, indiquer à l'OS de l'utiliser et lui interdire de le modifier pour éviter toute mauvaise surprise lors d'une mise à jour ultérieure de WSL2 ou de l'OS.

Désactiver la configuration automatique

Par défaut, le système créera automatiquement le fichier de configuration /etc/resolv.conf contenant les DNS à interroger. Pour modifier ce comportement, créez le fichier /etc/wsl.conf dans votre shell Linux et saisissez les lignes suivantes :

[network]
generateResolvConf = false

Redémarrez ensuite WSL2 en lançant la commande wsl --shutdown dans une invite de commande Windows. Ceci fermera le shell Linux

Configurer le serveur DNS et le domaine de recherche

Relancez votre shell Linux et créez/modifiez le fichier /etc/resolv.conf en y saisissant vos réglages. Pour chaque serveur DNS, une ligne nameserver est requise. La ligne domain indique le domaine auquel appartient votre ordinateur (facultatif) et la ligne search comprend les domaines à utiliser pour la résolution implicite (les domaines de recherche sont à séparer par un espace) :

nameserver 192.168.0.20
nameserver 192.168.0.21
domain mycompany.lan
search mycompany.lan mybranch.mycompany.lan

Vérouiller la configuration

Afin d'éviter toute modification de ce fichier (par un utilisateur ou par le système), utilisez la commande suivante qui le rendra immuable :

sudo chattr +i /etc/resolv.conf

Pour dévérouiller ce fichier à l'avenir, il suffira d'utiliser le paramètre -i à la place de +i.

Bonus : Capturer les liens ssh:// avec Windows Terminal

Autre belle évolution du système d'exploitation aux quatre couleurs : la sortie de l'application Terminal qui vient remplacer la vieillissante invite de commande en lui ajoutant tout un tas de fonctionnalités et permet d'ouvrir directement un shell Linux. Vous utilisez Windows Terminal et souhaitez y ouvrir les liens ssh:// via WSL2 ? Si vous utilisez Debian ou Ubuntu dans WSL2, vous pouvez copier le texte ci-dessous dans un fichier .reg et l'éxecuter en tant qu'administrateur sur Windows :

Debian
        
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ssh]
@="URL: ssh Protocol"
"URL Protocol"=""

;Protocol handler command
[HKEY_CLASSES_ROOT\ssh_custom_handler\shell\open\command]
@="\"C:\\Windows\\System32\\cmd.exe\" /k SET TARGETHOST=%1 && CALL SET T2=%%TARGETHOST:~6,-2%% && CALL \"%%LOCALAPPDATA%%\\Microsoft\\WindowsApps\\debian.exe\" run /bin/bash -c '/usr/bin/ssh %%T2%%'"

;default apps registration
[HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications]
"SSH Custom handler"="Software\\Classes\\ssh_custom_handler\\Capabilities"

;Declare app capabilities
[HKEY_CLASSES_ROOT\ssh_custom_handler\Capabilities\UrlAssociations]
"ssh"="ssh_custom_handler"

;Protocol handler registration
[HKEY_CLASSES_ROOT\ssh_custom_handler\Application]
"ApplicationIcon"="\"C:\\Program Files\\WindowsApps\\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\\debian.exe\""
"ApplicationName"="WSL Debian SSH Handler"
"ApplicationDescription"="WSL Debian SSH Handler"
"ApplicationCompany"="WSL Debian SSH Handler"

        
    
Ubuntu
        
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ssh]
@="URL: ssh Protocol"
"URL Protocol"=""

;Protocol handler command
[HKEY_CLASSES_ROOT\ssh_custom_handler\shell\open\command]
@="\"C:\\Windows\\System32\\cmd.exe\" /k SET TARGETHOST=%1 && CALL SET T2=%%TARGETHOST:~6,-2%% && CALL \"%%LOCALAPPDATA%%\\Microsoft\\WindowsApps\\ubuntu.exe\" run /bin/bash -c '/usr/bin/ssh %%T2%%'"

;default apps registration
[HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications]
"SSH Custom handler"="Software\\Classes\\ssh_custom_handler\\Capabilities"

;Declare app capabilities
[HKEY_CLASSES_ROOT\ssh_custom_handler\Capabilities\UrlAssociations]
"ssh"="ssh_custom_handler"

;Protocol handler registration
[HKEY_CLASSES_ROOT\ssh_custom_handler\Application]
"ApplicationIcon"="\"C:\\Program Files\\WindowsApps\\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\\ubuntu.exe\""
"ApplicationName"="WSL Ubuntu SSH Handler"
"ApplicationDescription"="WSL Ubuntu SSH Handler"
"ApplicationCompany"="WSL Ubuntu SSH Handler"
        
    

Il s'agit ici de créer une clé de registre qui va configurer Windows pour ouvrir les liens ssh:// avec un shell Linux via l'application Windows Terminal. Le résultat parle de lui-même :

Accès xDSL : retrouvez votre déb…

Commentaires