Ceci est un article de blog intéressant sur la façon de SSH dans WSL2 sur Windows 10 à partir d'une machine externe. Lis le. Sachez comment cela fonctionne. Apprend le. ET NE LE FAITES PAS CAR C'EST TROP COMPLEXE .
NE FAITES PAS CELA. C'est bon. Ça marche. Mais c'est baroque. Vous transférez des ports dans un petit sous-réseau local doté d'une VM, vous avez affaire à des changements d'adresses IP WSL2, vous devrez maintenir votre VM en marche et vous essayez généralement de patiner sur la colline.
Voici la chose. Dans ce message - ce que vous ne devriez pas faire - vous désactivez le pare-feu Windows pour votre port, transférez vers un sous-réseau interne, puis laissez WSL prendre le relais.
MAIS ! Windows 10 sait déjà accepter les connexions SSH. En fait, il a livré OpenSSH en tant que "fonctionnalité à la demande" pendant des années. Le problème est que vous (commutateurs Mac et Linux) n'aimez pas le shell par défaut - PowerShell.
Alors pourquoi ne pas changer le shell Windows par défaut pour SSH en Bash de WSL2 ?
Boom. Maintenant, vous n'avez plus de transfert de port, les pare-feu ne s'ouvrent que pour un processus et votre instance WSL2 démarre à l'entrée. Littéralement le meilleur des mondes.
Comment configurer SSH dans WSL2 sur votre machine Windows 10
Tout d'abord, ouvrez une invite admin PowerShell (menu Démarrer, tapez PowerShell, maintenez ctrl+shift et appuyez sur entrée) tapez ceci :
> Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
Vous voyez comment j'ai le client et non le serveur OpenSSH ? Ajoutez-le :
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Maintenant, démarrez le service SSHD ou configurez-le pour qu'il démarre automatiquement :
Start-Service sshd
Get-Service sshd
ou automatique :
Set-Service -Name sshd -StartupType 'Automatic'
Configuration du shell par défaut pour OpenSSH dans Windows 10
Sur mon serveur (la machine Windows sur laquelle je me connecte en SSH), je vais définir une clé de registre pour définir le shell par défaut. Dans ce cas, j'utiliserai PowerShell Core multiplateforme open source. Vous pouvez utiliser tout ce qui vous rend heureux et le bash de WSL2 me rend heureux.
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\WINDOWS\System32\bash.exe" -PropertyType String -Force
Notez que bash.exe dans ce contexte démarre "wsl -d YOURDEFAULTDISTRO
" donc vous voudrez savoir quelle est votre valeur par défaut, et si vous ne l'aimez pas, changez-la avec wsl --set-default DISTRO
.
ATTENTION :Vous avez besoin du CHEMIN COMPLET ET CORRECT dans cette commande ci-dessus. Cela fonctionne pour n'importe quel shell. Depuis que j'utilise bash.exe, WSL2 démarre gratuitement mais SSH avec cette solution utilise les clés SSH de Windows et l'authentification Windows. Notez que lorsque vous entrez votre mot de passe pour l'authentification !
Encore mieux si je voulais ajouter un élément de menu (profil) à un terminal Windows local avec une entrée pour ssh dans mon WSL sur ma machine Windows distante qui me connecterait automatiquement depuis ailleurs en utilisant des clés publiques, je pourrais le faire aussi !
Pour conclure et résumer :
- Ce billet de blog - celui que vous lisez utilise OpenSSH de Windows et s'authentifie auprès de Windows puis exécute WSL2. WSL2 démarre, utilise bash et Windows gère le trafic TCP.
- Cet autre article de blog - ici - n'a que des ports de transfert Windows, utilise Linux OpenSSH de WSL2 et s'authentifie auprès de Linux. Windows n'est impliqué qu'en périphérie. L'adresse IP WSL2 change au redémarrage et vous devrez maintenir vos règles de proxy de port et vos règles de pare-feu avec le script écouté à la fin de ce message.
Comprenez ce que vous voulez et utilisez celui qui vous convient.
Prendre plaisir!
Parrain : Bug en prod ? Allez au fond des choses, rapidement, avec la recherche en direct du journal de production dans Seq 2020.1.