[玩转系统] 如何在 Windows Server 上设置 OpenSSH [完整指南]
作者:精品下载站 日期:2024-12-14 12:32:17 浏览:16 分类:玩电脑
如何在 Windows Server 上设置 OpenSSH [完整指南]
Secure Shell (SSH) 协议和 OpenSSH 项目在 Linux 上已经存在了数十年。但 Windows 上的 OpenSSH 直到最近才被 Windows 世界所接受。因此,Windows Server 通常不会预先构建并准备好运行,并且需要进行一些设置。
在本教程中,您将学习如何像 Linux 一样轻松地通过 SSH 访问 Windows Server。您将了解如何在 Windows 上安装(或更新)OpenSSH、添加适当的防火墙规则以及配置公钥、密码和基于证书的身份验证。
先决条件
为了有效地遵循本文中的示例和演示,您需要满足以下这些要求。
- Windows Server 计算机 - 本文将使用 Windows Server 2019 Datacenter。本教程将使用的服务器将拥有一个名为 june 的用户帐户,并将通过 IP 连接到服务器地址为 40.117.77.227,主机名为 ataWindows。
- 安装了 PowerShell 7.1 的本地计算机。 PowerShell 7.1 可在 Windows、Linux 和 macOS 中使用。本文中的示例在 Windows 10 中使用 PowerShell 7.1。
下载 OpenSSH
与 Linux 服务器不同,Windows 服务器没有运行开箱即用的 SSH 服务器。但微软已经发布了适用于 Windows 的 OpenSSH 开源端口。在此版本中,您现在可以在 Windows 计算机上设置 SSH 服务器。
首先,您需要下载 OpenSSH。为此,请按照以下步骤操作:
- 使用远程桌面 (RDP) 或您首选的桌面管理器客户端连接到 Windows Server 上的桌面。
2. 在 Windows Server 桌面上,打开提升的 Windows PowerShell 控制台。
3. 接下来,复制以下代码,将其粘贴到 PowerShell 窗口中,然后按 Enter。该脚本会将最新的 OpenSSH 版本(截至撰写本文时为 v8.1.0.0p1-Beta)下载到当前工作目录。
如果您想保存 PowerShell 代码以下载 OpenSSH,您还可以打开 Windows PowerShell ISE 或 Visual Studio Code 等代码编辑器并将其保存在其中。
## Set network connection protocol to TLS 1.2
## Define the OpenSSH latest release url
$url = 'https://github.com/PowerShell/Win32-OpenSSH/releases/latest/'
## Create a web request to retrieve the latest release download link
$request = [System.Net.WebRequest]::Create($url)
$request.AllowAutoRedirect=$false
$response=$request.GetResponse()
$source = $([String]$response.GetResponseHeader("Location")).Replace('tag','download') + '/OpenSSH-Win64.zip'
## Download the latest OpenSSH for Windows package to the current working directory
$webClient = [System.Net.WebClient]::new()
$webClient.DownloadFile($source, (Get-Location).Path + '\OpenSSH-Win64.zip')
4. OpenSSH-Win64.zip 文件现在应该位于您当前的工作目录中。通过运行以下命令来验证这一点。
Get-ChildItem *.zip
如下所示,目录中存在 OpenSSH-Win64.zip 文件。
安装 OpenSSH
下载 OpenSSH-Win64.zip 后,下一步是在服务器上安装 OpenSSH。如果您需要的话,没有安装向导。
- 仍在同一 PowerShell 会话中时,复制以下代码并在 PowerShell 中运行它。此代码将 OpenSSH-Win64.zip 文件内容提取到 C:\Program Files\OpenSSH。
# Extract the ZIP to a temporary location
Expand-Archive -Path .\OpenSSH-Win64.zip -DestinationPath ($env:temp) -Force
# Move the extracted ZIP contents from the temporary location to C:\Program Files\OpenSSH\
Move-Item "$($env:temp)\OpenSSH-Win64" -Destination "C:\Program Files\OpenSSH\" -Force
# Unblock the files in C:\Program Files\OpenSSH\
Get-ChildItem -Path "C:\Program Files\OpenSSH\" | Unblock-File
2. 解压 ZIP 文件后,在 PowerShell 中运行以下命令来执行脚本 C:\Program Files\OpenSSH\install-sshd.ps1。 该脚本将安装 OpenSSH SSH 服务器服务 (sshd)和 OpenSSH 身份验证代理服务 (sshd-agent)。
& 'C:\Program Files\OpenSSH\install-sshd.ps1'
您可以在下面看到预期的结果。
要确保 SSH 服务器自动启动,请在 PowerShell 中运行以下命令。
## changes the sshd service's startup type from manual to automatic.
Set-Service sshd -StartupType Automatic
## starts the sshd service.
Start-Service sshd
添加 Windows 防火墙规则以允许 SSH 流量
此过程仅适用于您的 Windows 服务器使用 Windows 防火墙的情况。对于使用第三方防火墙的服务器,请参阅防火墙文档了解如何允许端口 22。
安装 OpenSSH 不会自动创建防火墙例外规则以允许 SSH 流量。因此,您的下一个任务是手动创建防火墙规则。
创建新的 Windows 防火墙规则的最简单方法之一是使用 PowerShell 和 New-NetFirewallRule cmdlet。下面的命令创建一个名为“允许 SSH”的防火墙规则,允许所有发往端口 22 的入站 TCP 流量。
复制以下命令并在 PowerShell 中运行它。
New-NetFirewallRule -Name sshd -DisplayName 'Allow SSH' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
下面的屏幕截图显示了创建防火墙规则后 PowerShell 中的预期输出。
使用密码身份验证与 SSH 连接
至此,您已经在 Windows 上安装了 OpenSSH 并执行了初始服务器配置。下一步是测试通过 SSH 连接是否确实有效。
要测试新配置的 SSH 服务器,现在让我们在本地计算机上运行 ssh 命令。
本节中的相同步骤也适用于连接到 Linux SSH 服务器时。
1. 这次从本地计算机打开 PowerShell。
2. 接下来,运行以下命令启动 SSH 登录过程。确保更改 Windows Server 的用户名和远程主机。
ssh [email
3. 由于您是第一次连接服务器,您会看到一个提示,无法确定主机的真实性。该消息意味着您的计算机尚未识别远程主机。输入 yes 并按 Enter 继续。
4. 当提示输入密码时,输入您的帐户密码并按 Enter 键。
5. 登录后,如下面的屏幕截图所示,您将到达远程主机的命令提示符。假设您想确认您已进入远程主机上的会话。为此,请输入主机名
,然后按 Enter。该命令应返回远程计算机名称。
将 OpenSSH 的默认 Shell 更改为 PowerShell
当您第一次登录 Windows SSH 服务器时,您会注意到默认的 shell 或命令解释器是 CMD。将 CMD 作为默认 SSH shell 很好,但如果您更喜欢使用 PowerShell 作为默认 shell,请按照以下步骤操作。
要将默认 OpenSSH shell 从 CMD 更改为 PowerShell:
首先,如果您尚未打开 Windows Server 上的 PowerShell 窗口,请打开该窗口。
接下来,在注册表项 HKLM:\SOFTWARE\OpenSSH 中创建一个名为 DefaultShell 的新注册表字符串值。 将 DefaultShell 字符串 数据设置为 Windows PowerShell 路径C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe。
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
下面的屏幕截图显示了该命令的预期结果。
配置公钥认证
在前面的部分中,您使用用户名和密码进行连接。这是可行的,但使用 SSH 服务器进行身份验证的更安全方法是使用密钥对。
简而言之,密钥对由称为公钥和私钥的两个密钥组成,它们构成了一组证明您身份的安全凭证。
公钥存储在服务器上,而私钥则保留在本地计算机上。您必须像对待密码一样对待私钥。如果私钥被泄露,任何人都可以使用它来访问您的 SSH 服务器。
准备administrators_authorized_keys 文件
公钥必须位于服务器上。但是哪里?对于 Windows 上的 OpenSSH,SSH 服务器从 C:\ProgramData\ssh\administrators_authorized_keys 文件中读取公钥。但这个文件默认不存在。您必须先创建一个。
请按照以下步骤创建administrators_authorized_keys文件并设置其正确的访问控制列表(ACL)。
在 Windows 服务器上:
1. 打开提升的 Windows PowerShell 控制台(如果尚未)。
2. 复制以下命令并在 PowerShell 中运行。此命令使用 New-Item
cmdlet 创建 administrators_authorized_keys 文件。
New-Item -Type File -Path C:\ProgramData\ssh\administrators_authorized_keys
您应该看到类似于下面的屏幕截图的结果。
3. 接下来,获取当前分配给ssh_host_dsa_key 文件的ACL,并将该ACL 复制到administrators_authorized_keys 文件。为此,请运行以下命令。
get-acl C:\ProgramData\ssh\ssh_host_dsa_key | set-acl C:\ProgramData\ssh\administrators_authorized_keys
OpenSSH 服务要求只有Administrators 组和SYSTEM 帐户有权访问administrators_authorized_keys 文件。将 ssh_host_dsa_key 的 ACL 复制到administrators_authorized_keys 是有意义的,因为 ACL 已经设置。
4. 现在打开 Windows 资源管理器。
5. 导航至C:\ProgramData\ssh\ 文件夹。
6. 右键单击administrators_authorized_keys 文件,然后单击属性。
7. 在属性页面上,单击安全选项卡,然后单击高级。
8.然后确认权限是否如下图所示。
生成新的 SSH 密钥对
要生成新的 SSH 密钥对,请使用 ssh-keygen 命令,该命令是 Windows 10(及更高版本)和大多数 Linux 操作系统内置的 OpenSSH 客户端工具的一部分。
本节中显示的示例适用于 Windows 和 Linux 计算机。
在本地计算机上的 PowerShell 控制台中:
1. 通过运行以下命令导航到主文件夹的 .ssh 目录。
cd ~/.ssh
2. 接下来,输入命令 ssh-keygen
并按 Enter。当要求输入文件位置来保存您生成的密钥时,请保留默认位置并按 Enter 键。这样做可以让您的 SSH 客户端在自动身份验证时找到您的 SSH 密钥。
在 Windows 中,默认密钥文件为 C:\Users\.ssh\id_rsa。
3. 在出现下一个提示时,将密码保留为空。此时,您不必使用密码进行测试。
向您的私钥添加密码可显着提高其安全性。密码充当您私钥的第二因素身份验证 (2FA)。
您会注意到该命令创建了两个文件; id_rsa(私钥)和id_rsa.pub(公钥)。
将公钥部署到 Windows SSH 服务器
现在您已经生成了私钥-公钥对,下一步是将公钥复制到 SSH 服务器上的 C:\ProgramData\ssh\administrators_authorized_keys 文件中。
在本地计算机上的 PowerShell 控制台中:
1. 复制以下代码并在 PowerShell 中运行。确保首先更改用户名和 IP 地址。你可以参考每个命令上面的注释来了解每个命令的作用。
# Read the public key
$public_key = Get-Content ~/.ssh/id_rsa.pub
# Append the public key to the administrators_authorized_keys on the server using ssh.
ssh [email "'$($public_key)' | Out-File C:\ProgramData\ssh\administrators_authorized_keys -Encoding UTF8 -Append"
2. 出现提示时输入密码,ssh 将继续复制公钥。您将看到类似的结果,如下所示。
使用公钥身份验证与 SSH 连接
现在您已将公钥复制到 SSH 服务器,不再需要使用密码进行身份验证。如下所示,ssh 没有提示输入密码。
配置证书认证
与公钥身份验证一样,证书身份验证是无密码或受密码保护的。要启用证书登录,请按照生成密钥对的相同过程进行操作,无需将公钥部署到 SSH 服务器。
您不需要将公钥映射到 SSH 服务器上的authorized_keys 或administrators_authorized_keys 文件。相反,公钥是使用证书颁发机构 (CA) 密钥进行签名的。
创建证书颁发机构 (CA) 密钥
生成用于签名的 CA 密钥与生成本文前面所做的用户密钥对类似。只是这一次,您需要为新 CA 密钥指定文件名。为此,请在 Windows Server 上的 PowerShell 控制台中执行以下操作:
执行 ssh-keygen 命令,如下所示。此命令在C:\ProgramData\ssh\ca_userkeys中创建 CA 密钥,但您可以随意使用不同的文件名。使用不同的文件名不会影响 CA 密钥功能。
当要求输入密码时,将密码留空并按 Enter。
ssh-keygen -f C:\ProgramData\ssh\ca_userkeys
您可以在下面看到该命令创建了两个文件。 ca_userkeys 是私钥,ca_userkeys.pub 是公钥。
现在您已经生成了 CA 密钥,请告诉 SSH 服务器信任该 CA 以及在哪里可以找到 CA 密钥。为此,请将新行 TrustedUserCAKeys path/to/ca_userkeys.pub
添加到服务器上的 C:\ProgramData\ssh\sshd_config 文件中。
运行以下命令将配置项附加到文件sshd_config中。
# If the SSH server is Windows
echo TrustedUserCAKeys C:\ProgramData\ssh\ca_userkeys.pub>> C:\ProgramData\ssh\sshd_config
签署用户的公钥
此时,您已生成 CA 密钥并将 SSH 服务器配置为信任 CA 公钥文件。现在剩下的就是签署您的用户公钥。
在本地计算机上的 PowerShell 控制台中:
1. 使用 SCP 命令将 id_rsa.pub
文件复制到 SSH 服务器上的主驱动器。确保将用户名和 IP 地址更改为正确的值。
scp ((Resolve-Path ~/.ssh/id_rsa.pub).Path) [email :id_rsa.pub
2. 使用 ssh 登录到 Windows Server。登录后,运行 ssh-keygen 来签署用户的公钥。您会注意到下面的命令使用了多个参数。让我们把它们分解一下。
-s C:\ProgramData\ssh\ca_userkeys
- 指定用于签署公钥的 CA 密钥位置。在此示例中,CA 密钥是您生成的密钥。-I id_username
- 指定要分配给签名用户公钥的 ID。将id_username
值更改为您想要的任何名称。-V +4w
- 该参数指定签名密钥的有效期。在此示例中,+4w
表示签名的用户密钥的有效期为四个星期。您可以将此值更改为您首选的有效期。-n username
- 这是拥有签名公钥的用户名。- 这是要签名的用户公钥的位置 (Windows)。
ssh-keygen -s C:\ProgramData\ssh\ca_userkeys -I id_username -V +4w -n username ~/id_rsa.pub
在 SSH 会话中运行该命令后,您应该会得到类似的输出,如下所示。如您所见,该命令生成了一个名为 id_rsa-cert.pub 的新文件,它是签名的用户证书。
3. 现在,导航回本地计算机 PowerShell 会话,并将 id_rsa-cert.pub 文件从服务器复制到本地计算机。运行该命令之前,请先将用户名和IP地址更改为正确的值。
scp [email :id_rsa-cert.pub ((Resolve-Path ~/.ssh/).Path)
复制完成后,您将在主文件夹中找到签名的用户证书,如下所示。
使用证书身份验证与 SSH 连接
您已经配置了证书身份验证,现在您拥有了用户证书。您现在应该测试是否可以通过证书身份验证连接 SSH 服务器。
使用证书连接到 SSH 的命令与使用密码或公钥相同。但是,如果您之前启用了公钥身份验证,请先将其禁用。否则,ssh 将继续使用您的密钥对而不是您的证书。
要禁用您的密钥对,请从 administrators_authorized_keys 文件中删除您的公钥。为此,请按照以下步骤操作。
请注意,后续命令将清空整个administrators_authorized_keys 文件,从而有效删除所有映射的公钥。如果您不想清除所有映射的公钥,请使用文本编辑器手动从每个文件中删除选定的公钥。
通过 SSH 连接到 Windows Server 时:
1. 在 PowerShell 中运行以下代码以清空 administrators_authorized_keys 文件。
# Clear the administrators_authorized_keys file
$NULL > C:\ProgramData\ssh\administrators_authorized_keys
# Confirm that the administrators_authorized_keys is empty
Get-Content C:\ProgramData\ssh\administrators_authorized_keys
2. 此时,authorized_keys 和administrators_authorized_keys 文件为空,如下面的屏幕截图所示。
3. 输入 exit
并按 Enter 键以断开与 SSH 会话的连接。您将返回 PowerShell 会话。
4. 删除公钥后,您的下一次 ssh 登录尝试将使用证书身份验证。登录体验将与公钥身份验证相同。
结论
您现在已经从头开始设置了 OpenSSH Windows Server,一直探索和设置各种身份验证方式。您现在可以像使用 Linux 一样连接到 Windows 服务器!
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag