是否可以更新 Windows 10 中的内置 OpenSSH 客户端?

是否可以更新 Windows 10 中的内置 OpenSSH 客户端?

我在使用内置 OpenSSH 客户端时遇到了一些问题,根据Win32-OpenSSH Github页面,似乎在较新的版本中已解决。最新版本是 v7.9,而预装的客户端是版本 7.6p1。

PS C:\> ssh -V
OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4

我知道可以将 OpenSSH 作为“应用程序和功能”设置页面中的可选功能安装,也可以使用 Powershell 安装。这对我来说似乎毫无用处,因为客户端显然已经安装好了。

PS C:\>  Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

不幸的是,似乎无法通过这种方式更新客户端,而且 Github 页面似乎没有发布二进制文件。这是否意味着如果我想使用较新的版本,我必须自己制作二进制文件,它们是否可以作为未经签名的替代品?有没有更简单的方法?

答案1

给出了使用 Powershell 安装最新软件包的步骤。

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$url = 'https://github.com/PowerShell/Win32-OpenSSH/releases/latest/'
$request = [System.Net.WebRequest]::Create($url)
$request.AllowAutoRedirect=$false
$response=$request.GetResponse()
$([String]$response.GetResponseHeader("Location")).Replace('tag','download') + '/OpenSSH-Win64.zip'  
$([String]$response.GetResponseHeader("Location")).Replace('tag','download') + '/OpenSSH-Win32.zip'

如果您使用 Chocolatey,则在命令提示符中键入以下内容,如下所示这里

choco upgrade openssh

答案2

回答覆盖文件的工作原理:

下载最新版本并在 C:\Windows\System32 中更新。

但是,由于 Windows 限制了在 System32 中修改/写入文件的权限,因此说起来容易做起来难。以管理员身份运行 PowerShell 不足以修改文件。我必须更改所有权并添加完全控制权限才能完成此操作,如下所示:

# Download upstream bins
$url = 'https://github.com/PowerShell/Win32-OpenSSH/releases/latest/'
$request = [System.Net.WebRequest]::Create($url)
$request.AllowAutoRedirect=$false
$response=$request.GetResponse()
$source = $([String]$response.GetResponseHeader("Location")).Replace('tag','download') + '/OpenSSH-Win64.zip'
(New-Object System.Net.WebClient).DownloadFile($source, 'OpenSSH-Win64.zip')



# Overwrite windows installed bins
$openSshBins = (Get-ChildItem 'C:\WINDOWS\System32\OpenSSH\').Name
Expand-Archive -Path .\OpenSSH-Win64.zip -DestinationPath .
takeown.exe /a /r /f C:\Windows\System32\OpenSSH\
icacls.exe 'C:\Windows\System32\OpenSSH' /grant 'BUILTIN\Administrators:(OI)(CI)F'
icacls.exe 'C:\Windows\System32\OpenSSH' /grant 'BUILTIN\Administrators:F' /t
Stop-Service ssh-agent
$openSshBins | %{ Copy-Item -Path .\OpenSSH-Win64\$_ -Destination C:\Windows\System32\OpenSSH\ }
Start-Service ssh-agent

请注意,要自动下载,您需要允许重定向。

答案3

  1. 删除默认版本的 OpenSSH:
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
  1. 安装最新版本:
  1. 将其添加到路径:
[Environment]::SetEnvironmentVariable("Path", 
$env:Path + ';' + ${Env:ProgramFiles} + '\OpenSSH', 
[System.EnvironmentVariableTarget]::Machine)

答案4

二进制文件现已GitHub。下载最新版本并在 C:\Windows\System32 中更新。

相关内容