我在使用内置 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
- 删除默认版本的 OpenSSH:
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
- 安装最新版本:
- 使用 Windows 软件包管理器:
winget install openssh-beta
- 从 GitHub 手动获取(参见使用 MSI 安装 Win32 OpenSSH)
- 将其添加到路径:
[Environment]::SetEnvironmentVariable("Path",
$env:Path + ';' + ${Env:ProgramFiles} + '\OpenSSH',
[System.EnvironmentVariableTarget]::Machine)
答案4
二进制文件现已GitHub。下载最新版本并在 C:\Windows\System32 中更新。