Statt `cmd.exe` eine andere Shell

Wer sich auf einen Windows-Rechner verbindet, landet standardmässig in cmd.exe. Bash, PowerShell oder die WSL-Distribution sind möglich — die Entscheidung fällt aber auf dem Windows-Rechner, nicht in MLC Terminal.

Das ist keine fehlende Funktion, sondern wie SSH gebaut ist: Welche Shell eine Sitzung bekommt, bestimmt der SSH-Server. Ein Terminalprogramm kann das nicht überstimmen, und keines kann es — weder PuTTY noch das ssh in Ihrer Kommandozeile.

Die kurze Fassung

Auf dem Windows-Rechner, PowerShell als Administrator:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" `
  -Name DefaultShell `
  -Value "C:\Windows\System32\wsl.exe" `
  -PropertyType String -Force

Restart-Service sshd

Die nächste Verbindung landet in WSL statt in cmd.exe. In MLC Terminal ist nichts zu ändern.

Andere Shells

Derselbe Schlüssel, ein anderer Pfad:

Ziel -Value
WSL (Standard-Distribution) C:\Windows\System32\wsl.exe
PowerShell 5 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
PowerShell 7 C:\Program Files\PowerShell\7\pwsh.exe
Git Bash C:\Program Files\Git\bin\bash.exe
Zurück zu cmd.exe Schlüssel DefaultShell löschen

Wenn der Windows-Benutzer anders heisst als der WSL-Benutzer

Der SSH-Server meldet Sie als Windows-Benutzer an. Heissen Sie unter Windows alice und unter Linux mlc, landen Sie in WSL als alice — und falls es diesen Linux-Benutzer nicht gibt, als root.

Der Benutzer lässt sich im selben Schlüssel mitgeben:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" `
  -Name DefaultShell `
  -Value "C:\Windows\System32\wsl.exe -u mlc" `
  -PropertyType String -Force

Das gilt dann für jede SSH-Verbindung auf diesen Rechner, unabhängig davon, wer sich anmeldet. Für einen Einzelplatz oder einen dedizierten Server in Ordnung; auf einer Maschine mit mehreren Benutzern besser die WSL-Benutzer so anlegen, dass sie zu den Windows-Konten passen.

Nachsehen, ob es gewirkt hat

Nach dem Verbinden:

echo $SHELL
uname -a

Meldet sich cmd.exe weiterhin, wurde meist der Dienst nicht neu gestartet — Restart-Service sshd — oder PowerShell lief ohne Administratorrechte, und der Schlüssel wurde gar nicht geschrieben.

Was MLC Terminal davon merkt

Nach der Umstellung erkennt der Host-Scan die Gegenstelle als Linux: Die Fähigkeiten (tmux, Docker, SFTP) werden dann für WSL ermittelt, nicht für Windows. Wenn die Anzeige noch das Alte zeigt, den Scan auf der Host-Übersicht einmal wiederholen.