【Win11 | SSH】详细教你如何在Windows 11 下完成OpenSSH的安装(保姆级攻略)

开源 0

文章目录

  • 一、问题描述
  • 二、问题尝试解决
    • 2.1 ssh的问题
    • 2.2 如何手动安装
    • 2.3 install 脚本找不到
    • 2.4 power shell 开始报错
    • 2.5 继续安装ssh
  • 三、输入 ssh 再报错

一、问题描述

最近在测试github的连接时,在终端或命令行窗口中,输入以下命令测试你的 SSH 连接是否正常:

ssh -T git@github.com

如果一切正常,命令输出以下信息:

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

其中 username 是你的 GitHub 用户名。

但是我的命令出错:

在这里插入图片描述

二、问题尝试解决

2.1 ssh的问题

这个错误提示说明我的操作系统没有找到 ssh 命令,可能是因为我的计算机没有安装 OpenSSH。

可以尝试以下步骤:

  1. 打开 Windows PowerShell 或者命令提示符(cmd)窗口。

  2. 输入以下命令,安装 OpenSSH:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

如果出现提示要求确认,输入 Y 并按回车键。

但是我的操作引起报错!

C:/Users/XiaoWang>Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0'Add-WindowsCapability' 不是内部或外部命令,也不是可运行的程序或批处理文件。

这个错误提示说明你的操作系统没有找到 Add-WindowsCapability 命令,可能是因为你的计算机版本太老,不支持安装 OpenSSH。

可以尝试以下方法:

  1. 检查你的计算机是否运行的是 Windows 10 1709 或更新的版本,只有这些版本才支持安装 OpenSSH。
  2. 如果你的计算机符合条件,但是 Add-WindowsCapability 命令仍然无法使用,可以尝试手动安装 OpenSSH。
  3. 在 GitHub 上有一个名为 “PowerShell/Win32-OpenSSH” 的项目,提供了 Windows 平台的 OpenSSH 安装包,你可以前往该项目页面下载并安装 OpenSSH。

该项目页面的链接为:

https://github.com/PowerShell/Win32-OpenSSH/releases

在这里插入图片描述
你可以根据你的计算机系统版本和位数选择对应的安装包下载。安装完成后,重新打开 PowerShell 或者命令提示符窗口,再次尝试 ssh 命令,确认是否安装成功。

2.2 如何手动安装

如果你已经手动下载了 OpenSSH 的安装包,那么你可以按照以下步骤进行安装:

  1. 解压下载的安装包文件,找到其中的 install 脚本。
  2. 右键点击 install 脚本文件,选择 “以管理员身份运行”,然后按照提示进行安装。
  3. 安装完成后,重新打开 PowerShell 或者命令提示符窗口,再次尝试 ssh 命令,确认是否安装成功。

但是我没有找到这个脚本。

尝试以下方法:

  1. 打开 PowerShell 或者命令提示符窗口,使用 cd 命令进入 OpenSSH 安装包的目录。
  2. 在该目录下按住 Shift 键,同时点击鼠标右键,会出现一个菜单,其中包含了 “在此处打开 PowerShell 窗口” 或者 “在此处打开命令提示符窗口” 选项,你可以选择其中的任意一项打开对应的窗口。
  3. 在打开的窗口中输入 ./install 命令,按照提示进行安装。

这种方法相当于以管理员身份运行 PowerShell 或者命令提示符窗口,以便你能够运行 install 脚本并完成 OpenSSH 的安装。

但是继续出错,install 脚本没找到。

2.3 install 脚本找不到

如果你手动下载了 OpenSSH 的安装包,但是找不到 install 脚本,可能是因为下载的安装包不同。以下是一些可能的解决方案:

  1. 如果你下载的是 OpenSSH 的 Windows 安装程序(OpenSSH-Win64.zip),那么你可以双击该程序并按照提示进行安装。安装完成后,你应该可以在 PowerShell 或者命令提示符窗口中使用 ssh 命令了。
  2. 如果你下载的是 OpenSSH 的源代码,那么你需要先编译该源代码,并在编译完成后手动安装 OpenSSH。编译和安装过程可能会比较复杂,请参考官方文档或者其他相关资料进行操作。
  3. 如果你下载的是 OpenSSH 的二进制文件(.exe 文件),那么你可能需要查看该文件的使用说明或者手册,以了解如何进行安装和配置。不同的二进制文件可能具有不同的安装方式和配置方法,需要根据具体情况进行操作。

2.4 power shell 开始报错

在这里插入图片描述
首次报错内容为:

安装最新的 PowerShell,了解新功能和改进!https://aka.ms/PSWindows. : 无法加载文件 C:/Users/XiaoWang/Documents/WindowsPowerShell/profile.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。所在位置 行:1 字符: 3+ . 'C:/Users/XiaoWang/Documents/WindowsPowerShell/profile.ps1'+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    + CategoryInfo          : SecurityError: (:) [],PSSecurityException    + FullyQualifiedErrorId : UnauthorizedAccessPS C:/Users/XiaoWang>

这个错误是因为 PowerShell 执行策略限制了在此系统上运行脚本。为了解决这个问题,你可以尝试以下方法:

  1. 打开 PowerShell,以管理员身份运行,然后输入以下命令:
Set-ExecutionPolicy RemoteSigned

这将设置 PowerShell 执行策略,允许在此系统上运行本地签名的脚本。

  1. 如果你不想放宽执行策略,可以手动修改 profile.ps1 文件的权限,以允许它在此系统上运行。你可以使用以下命令将其修改为允许运行:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

这将允许当前用户在此系统上运行任何脚本。

请注意,在更改执行策略或修改文件权限之前,请仔细考虑安全性风险,并确保你知道你所做的事情。

但是还是报错:

在这里插入图片描述

报错内容为:

安装最新的 PowerShell,了解新功能和改进!https://aka.ms/PSWindowsInvoke-Expression : 所在位置 行:1 字符: 536+ ... em32;C:/Users/XiaoWang/AppData/Local/Microsoft/WindowsApps;"%CUDA_LIB ...+                                                                  ~必须在“%”运算符后面提供一个值表达式。所在位置 行:1 字符: 536+ ... XiaoWang/AppData/Local/Microsoft/WindowsApps;"%CUDA_LIB_PATH%;%CUDA_B ...+                                                    ~~~~~~~~~~~~~~表达式或语句中包含意外的标记“CUDA_LIB_PATH%”。所在位置 D:/Anaconda/shell/condabin/Conda.psm1:76 字符: 9+         Invoke-Expression -Command $activateCommand;+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseException    + FullyQualifiedErrorId : ExpectedValueExpression,Microsoft.PowerShell.Commands.InvokeExpressionCommand加载个人及系统配置文件用了 1287 毫秒。

该错误似乎是由于环境变量中的CUDA_LIB_PATH和CUDA_BIN_PATH未定义导致的。请检查您的环境变量,确保这些变量已正确定义。另外,建议您升级您的Anaconda和PowerShell版本以获得更好的支持和性能。

您可以尝试手动添加这些环境变量。打开系统属性,然后点击环境变量,找到CUDA_LIB_PATH和CUDA_BIN_PATH,然后将其值更改为正确的路径。如果这些变量不存在,请单击“新建”按钮并创建它们。另外,建议您升级您的Anaconda和PowerShell版本以获得更好的支持和性能。

CUDA_LIB_PATH和CUDA_BIN_PATH的路径怎么看?

要查看CUDA_LIB_PATH和CUDA_BIN_PATH的路径,可以按照以下步骤进行:

  1. 打开NVIDIA CUDA Toolkit的安装目录,通常安装在C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA。
  2. 在CUDA安装目录下,您会看到版本号,例如“v11.4”。进入该目录。
  3. 在该目录下,您将看到bin和lib文件夹。这些文件夹的路径即为CUDA_BIN_PATH和CUDA_LIB_PATH。
  4. 可以将这些路径添加到环境变量中,以便在使用CUDA时能够正常工作。

但是继续报错:

Invoke-Expression : 所在位置 行:1 字符: 662+ ... nvvp;C:/Users/XiaoWang/AppData/Local/Microsoft/WindowsApps;"%CUDA_LIB ...+                                                                  ~必须在“%”运算符后面提供一个值表达式。所在位置 行:1 字符: 662+ ... XiaoWang/AppData/Local/Microsoft/WindowsApps;"%CUDA_LIB_PATH%;%CUDA_B ...+                                                    ~~~~~~~~~~~~~~表达式或语句中包含意外的标记“CUDA_LIB_PATH%”。所在位置 D:/Anaconda/shell/condabin/Conda.psm1:76 字符: 9+         Invoke-Expression -Command $activateCommand;+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseException    + FullyQualifiedErrorId : ExpectedValueExpression,Microsoft.PowerShell.Commands.InvokeExpressionCommand

这个错误信息与之前的一条类似,提示“表达式或语句中包含意外的标记“CUDA_LIB_PATH%”。”,看起来也与CUDA相关。请确认您的CUDA环境变量是否正确设置,并检查在您的环境变量中是否包含了不正确的语法。如果有,请删除并重新设置正确的环境变量。另外,也请确保您的Anaconda环境变量设置正确。

如何修改呢?

可以在Anaconda Prompt中运行以下命令,修改环境变量:

setx CUDA_LIB_PATH "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.3/lib/x64"setx CUDA_BIN_PATH "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.3/bin"

这里假设CUDA的安装路径为"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1",你可以根据实际情况修改路径。修改完毕后,需要关闭当前的Anaconda Prompt窗口,重新打开一个新的窗口使环境变量生效。

在这里插入图片描述
这个错误信息显示在 D:/Anaconda/shell/condabin/Conda.psm1 的第76行,似乎是一个 Anaconda 的配置文件中有问题,建议暂时先忽略这个错误,因为这个错误不会影响您在 PowerShell 中进行其他操作。如果需要继续排查这个错误,您可以检查该配置文件中是否有错误,或者卸载 Anaconda 后重新安装。

这个错误似乎是由于某些字符未正确转义或引号未正确使用导致的。您可以检查您的代码中涉及的路径和命令,确保它们正确引用了相关的文件和文件夹,并且引号和转义字符正确使用。

例如,在您之前提供的错误中,引号似乎被放错了位置,应该将其放在包含路径的引号中。同时,路径中包含空格,可能需要使用引号将其括起来。

这里不再修改!

2.5 继续安装ssh

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

命令报错:
在这里插入图片描述

Add-WindowsCapability : 请求的操作需要提升。所在位置 行:1 字符: 1+ Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    + CategoryInfo          : NotSpecified: (:) [Add-WindowsCapability], COMException    + FullyQualifiedErrorId : Microsoft.Dism.Commands.AddWindowsCapabilityCommand

这个错误提示是说需要使用管理员权限运行PowerShell命令。您可以按照以下步骤运行PowerShell并以管理员身份运行该命令:

  1. 按下 Windows 键+X,选择 Windows PowerShell(管理员)。
  2. 在弹出的窗口中,输入命令 Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 并按回车键。
  3. 等待命令运行完毕。如果一切顺利,该命令将会成功安装 OpenSSH 客户端功能。

在这里插入图片描述
到这里,SSH安装成功!

三、输入 ssh 再报错

我继续输入ssh,没想到再次报错:

在这里插入图片描述
看起来 OpenSSH 已经成功地安装在你的系统上。但是,在运行 ssh 命令之前,你需要在 PowerShell 窗口中打开一个新的终端窗口(因为新的 PATH 环境变量还没有应用到当前窗口)。你可以在 PowerShell 窗口中运行以下命令来打开一个新的终端窗口:

cmd

这将在当前 PowerShell 窗口中启动一个新的命令提示符窗口,但是该窗口已经更新了 PATH 环境变量,所以现在你应该可以在该窗口中运行 ssh 命令了。

在这里插入图片描述
看起来OpenSSH客户端已成功安装,但您在命令提示符或PowerShell中使用ssh命令时仍然遇到问题。这可能是由于路径环境变量未正确配置所导致的。请尝试在命令提示符或PowerShell中使用以下命令,将OpenSSH目录添加到系统的路径环境变量中:

setx /M PATH "%PATH%;C:/Windows/System32/OpenSSH"

然后关闭并重新打开命令提示符或PowerShell窗口,再次尝试运行ssh命令。如果仍然遇到问题,请确认OpenSSH客户端的安装路径是否为C:/Windows/System32/OpenSSH,如果不是,请将上面的命令中的路径替换为实际路径。

但是依旧报错:

(base) C:/Users/XiaoWang>setx /M PATH "%PATH%;C:/Windows/System32/OpenSSH"错误: 拒绝访问注册表路径。

这个错误通常是由于缺少管理员权限导致的。请尝试在管理员权限下打开命令行窗口,并重新运行命令。具体操作方法如下:

  1. 在Windows开始菜单中找到“命令提示符”,右键单击它,然后选择“以管理员身份运行”选项。
  2. 在管理员权限的命令行窗口中,输入以下命令,然后按Enter键执行:
setx /M PATH "%PATH%;C:/Windows/System32/OpenSSH"
  1. 关闭命令行窗口,并重新打开一个新的命令行窗口。
  2. 在新的命令行窗口中,输入“ssh”命令,看看是否能够正常使用OpenSSH客户端。

继续报错:

在这里插入图片描述
尝试在 PowerShell 中执行以下命令,以确保 ssh 已被添加到环境变量中:

$env:Path

该命令将显示当前的环境变量路径。请确保它包含 C:/Windows/System32/OpenSSH 目录,因为该目录包含 ssh.exe 文件。

如果路径中不包含该目录,请确保您已以管理员身份运行 PowerShell 并正确执行了 setx 命令,如果仍然出现问题,请尝试重新启动计算机。

然而还是不行:

在这里插入图片描述

从您提供的信息来看,OpenSSH似乎已安装成功,但是系统仍然无法找到ssh命令。这可能是由于系统环境变量未正确设置导致的。您可以尝试将OpenSSH路径添加到系统环境变量中,以使系统能够找到ssh命令。

首先,您需要在管理员模式下打开PowerShell窗口。然后,运行以下命令:

[System.Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:/Windows/System32/OpenSSH", [System.EnvironmentVariableTarget]::Machine)

在这里插入图片描述
尝试使用下面的命令在当前会话中更新 Path 环境变量,使得系统能够正确找到 ssh 命令:

$env:Path += ";C:/Windows/System32/OpenSSH"

然后再次运行 ssh 命令,应该就能正常使用了。如果还有问题,请尝试在新的命令提示符窗口中尝试。

在这里插入图片描述
顺利成功!

测试一下能否远程连接上实验室的电脑:

在这里插入图片描述
在这里插入图片描述
顺利连接成功!

也许您对下面的内容还感兴趣: