PowerShell 需要大约 10 秒来执行第一个命令,但仅限于在 OpenSSH 服务器内

PowerShell 需要大约 10 秒来执行第一个命令,但仅限于在 OpenSSH 服务器内

我在多台电脑上安装了适用于 Windows 的 OpenSSH(服务器和客户端)。问题只发生在一台特定的电脑上,但它是我的主桌面:

场景 #1:

  • 我从任何 ssh 客户端(远程或本地主机、Windows OpenSSH、Ubuntu 20.04 上的 ssh、WSL 上 Ubuntu 20.04 上的 ssh 等)ssh进入我的主要台式电脑(我们称之为)host1
  • 执行powershell.exe -NoProfile
  • 开始输入命令(例如Write-Host "Hello"Get-ChildItem
  • 结果:大约10 秒延迟在命令的字符出现之前
  • 此后,一切都按预期进行;没有意外的延迟

场景 #2:

  • ssh host1 powershell.exe(也尝试过ssh -t host1 powershell.exessh -tt host1 powershell.exe
  • 在 PowerShell 中执行任何命令(例如Get-ChildItem
  • 结果:虽然命令立即出现,但大约有10 秒延迟在返回结果之前
  • 在 PowerShell 中执行相同命令(或任何其他命令)
  • 结果:立即执行

场景#3:

  • ssh host1 powershell.exe Get-ChildItem
  • 结果:大约10 秒延迟在结果出现之前
  • ssh host1 powershell.exe Get-ChildItem再次
  • 结果:仍然是10 秒延迟每次将来调用时

场景#4:

  • ssh host1 powershell.exe -NoProfile
  • 结果:大约10 秒延迟在外壳出现之前
  • shell出现后,一切正常

场景#5:

  • 在 Windows 的命令提示符下,只需执行 powershell.exe
  • 结果:没有问题。这仅在 sshd 下运行时才会发生。

场景#6:

  • ssh -t host1 wsl.exe
  • 结果:按预期工作,输入或命令结果没有延迟

场景#7:

  • ssh host1
  • 输入不存在的命令jkjkjk
  • 结果:大约10 秒延迟返回错误之前
  • 所以不是只是PowerShell,但 cmd 只会导致错误长时间延迟

场景#8:

  • ssh host1
  • 键入一个确实存在的命令并导致控制台输出(我使用了 Sysinternals whois.exe
  • 结果:按预期立即返回,没有延迟

场景#9:

场景#10:

  • 将 PowerShell Core 设置为 OpenSSH 服务器的默认 shell
  • 执行ssh host1 wsl.exe ls
  • 结果:立即返回 - 没有问题

场景#11:

  • 将 PowerShell Core 设置为默认 shell,如 #10 所示
  • 执行ssh host1 Get-ChildItem
  • 结果:回到10 秒延迟在结果出现之前
  • 为什么运行会wsl.exe ls在基本运行中停滞的相同 PowerShell Core 子 shell 中立即返回其结果gci

我尝试过的方法

如上所述,这种情况只发生在我的主桌面上。我有另一台配置几乎完全相同的桌面,但这种情况没有发生。显然一定有一些不同之处。

因此,在延迟较长的 PC 上,我:

  • 卸载了 OpenSSH 服务器,删除了 HKLM:/SOFTWARE/OpenSSH 注册表项,重命名C:\ProgramData\ssh,重命名我的%userprofile%/.ssh,重新启动,然后重新安装 OpenSSH 服务器。

    • 结果:同样的问题
  • 尝试使用 PowerShell Core ( pwsh.exe)

    • 结果:同样的问题
  • 尝试了 PowerShell 的完全限定路径 ( ssh host1 c:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -NoProfile)

    • 结果:同样的问题
  • 尝试sshd.exe按照以下方式在调试模式下运行这些说明. 首先尝试sshd.exe -v

    • 结果:呃,没有延迟!
    • 这告诉我们什么?
  • 尝试运行上述相同的步骤,但psexec -s按照调试说明在 SYSTEM 帐户下运行它。

    • 结果:再次回到同样的问题——所有情况下都延迟。
    • 这告诉我们什么?
  • 将前两次尝试的调试输出捕获到文件中并保存diff它们。

    • 结果:除了密钥签名和 PID 之外,输出没有本质区别
  • testuser在 Windows 中创建了一个ssh testuser@host1 powershell.exe

    • 结果:没问题。

所以这告诉我这是我的用户中的问题。至于是什么,我还是不确定。

  • 重命名我的%userprofile%/Documents/WindowsPowerShell%userprofile%/Documents/PowerShell(PowerShell 核心)目录并重试。

    • 结果:同样的问题
    • 对此并没有抱有太大希望,因为它发生在 PowerShell 和 PowerShell Core 下,而它们使用不同的配置文件目录。
  • 已清空%temp%

    • 结果:没有变化 - 同样的难题
  • 卸载 PowerShelloptionalfeatures.exe并重新安装

    • 结果:同样的问题

您对下一步该看什么有什么想法吗?如果可以避免的话,我真的不想毁掉我的整个用户资料。

相关内容