Skip to content

[Pre-release 2.7.10] Non-interactive ssh host <command> hangs under mirrored networking (OpenSSH IPQoS mid-session retag) #41101

Description

@cavanaug

Windows Version

Microsoft Windows [Version 10.0.26200.8655]

WSL Version

2.7.10.0 (pre-release)

WSL version: 2.7.10.0
Kernel version: 6.18.33.2-2
WSLg version: 1.0.73.2
MSRDC version: 1.2.6676
Direct3D version: 1.611.1-81528511
DXCore version: 10.0.26100.1-240331-1435.ge-release
Windows version: 10.0.26200.8655

Are you using WSL 1 or WSL 2?

  • WSL 2
  • WSL 1

Kernel Version

6.18.33.2-2 (6.18.33.2-microsoft-standard-WSL2)

Distro Version

Debian GNU/Linux 13 (trixie)

Other Software

  • OpenSSH_10.0p2 Debian-7+deb13u4 (client inside WSL)
  • .wslconfig uses mirrored networking:
[wsl2]
networkingMode=mirrored
firewall=false
dnsTunneling=false
autoProxy=false
  • Active NIC at time of repro: Intel Wi-Fi 6 AX201 (also reproduced to LAN host)
  • No HP “LiveQoS” NDIS filter present; Microsoft QoS Packet Scheduler (ms_pacer) is enabled

Repro Steps

  1. Install WSL pre-release 2.7.10.0 with networkingMode=mirrored.
  2. From WSL, use stock OpenSSH defaults (ssh -G <host> reports ipqos ef cs1).
  3. Interactive login works:
ssh <host>
  1. Any non-interactive remote command hangs after authentication:
ssh <host> true
ssh <host> 'echo ok'
ssh -T <host> true
  1. Same hang occurs to LAN hosts and to hosts reached via public DNS/WAN.
  2. Workaround restores remote commands:
ssh -o IPQoS=none <host> true
# or in ~/.ssh/config:
# Host *
#     IPQoS none
  1. Does not reproduce in either of these controls (same hosts / same style of non-interactive command):
    • Non-WSL (native Windows / non-WSL SSH): ssh <host> <command> works.
    • Non-pre-release / stable WSL (same distro/OpenSSH settings/hosts): ssh <host> <command> works.

Failure is specific to WSL pre-release 2.7.10.0 in this environment.

Expected Behavior

ssh <host> <command> should complete normally (auth, exec, exit), same as interactive ssh <host>.

Actual Behavior

  • Interactive ssh <host> succeeds.
  • Non-interactive ssh <host> <command> authenticates, then hangs indefinitely (no command output, no exit).
  • ssh -vvv shows the session stalls after sending the exec request with channel receive window stuck at 0, e.g. open confirm rwindow 0, and never receives a window adjust / exit-status.
  • Immediately after the command channel is set up, the client switches QoS (set_sock_tos / non-interactive path). OpenSSH default is interactive EF, bulk/non-interactive CS1 (IP_TOS 0x20), with a mid-session retag when the session becomes non-interactive (OpenSSH/Debian IPQoS updates in 1:10.0p1-7+deb13u3+).

Diagnostic Logs

Theory: WSL pre-release mirrored networking mishandles OpenSSH’s mid-connection DSCP/TOS change (EF → CS1). Interactive sessions never take the bulk retag path, so they keep working. Stable WSL does not show this failure.

Workaround: IPQoS none (or a single fixed class such as IPQoS ef / IPQoS af21) so OpenSSH does not retag mid-session.

Happy to gather Feedback Hub / networking logs if useful.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions