我在多台电脑上安装了适用于 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.exe
和ssh -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:
- 已启用在 PowerShell Core 上通过 ssh 进行远程处理
Enter-PSSession -HostName host1
(均使用公钥和密码验证;均来自本地主机 1 以及主机 2)- 结果:大约10 秒延迟在远程会话中出现提示之前
场景#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%
- 结果:没有变化 - 同样的难题
卸载 PowerShell
optionalfeatures.exe
并重新安装- 结果:同样的问题
您对下一步该看什么有什么想法吗?如果可以避免的话,我真的不想毁掉我的整个用户资料。