从 ssh 运行时无法识别 Powershell

从 ssh 运行时无法识别 Powershell

我有一个Windows 服务器 2016(版本 1607,内部版本 14393)OpenSSH安装并正在运行。

最近,我注意到通过 SSH 连接时我无法再从远程客户端运行 powershell,并且不断出现错误'Powershell' is not recognized as an internal or external command, operable program or batch file

我也尝试通过 CMD 在本地运行它,并得到了上述相同的错误。我按照这个问题突然发现我缺少环境变量 小路到 powershell。通过添加%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\到我的,Path我能够再次通过 CMD 在本地运行 powershell。

但即使有了这个修复,我仍然无法在使用 SSH 连接时运行 powershell,这更奇怪,因为 SSH 连接在 Windows 中默认总是以 CMD 形式运行。

下面是我的连接过程的一个例子(从 ubuntu 16.04 终端运行):

foo@foo:~$ ssh administrator@_SERVER_IP_
administrator@_SERVER_IP_'s password:

Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

administrator@_SERVER_IP_ C:\Users\Administrator>powershell
'Powershell' is not recognized as an internal or external command,  operable program or batch file.

有什么提示可能导致该问题的原因是什么?

编辑:在 SSH 上,命令的输出where powershell.exeINFO: Could not find files for the given pattern(s).

答案1

我设法旁路这个问题这不是一个解决办法为它。我将 OpenSSH 配置为使用 powershell 作为任何新 SSH 连接的默认 shell,而不是默认的 CMD。如果需要,我可以从 powershell 启动 cmd,尽管一旦使用 powershell 就没用了,因为它也支持每个 CMD 命令。

来自微软文档:适用于 Windows 10 1809 和 Server 2019 的 OpenSSH 服务器配置(这也适用于 Windows Server 2016)。

只需在 处创建一个注册表项HKLM:\SOFTWARE\OpenSSH,其类型为string,名称为DefaultShell,值为C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

这将对任何新建立的 SSH 连接生效。

这也可以通过 powershell 命令完成:New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

再说一遍,这不是解决办法,并且仅将默认shell更改为powershell(意味着如果您默认运行第三方shell例如bash,它们将被更改为powershell)。

相关内容