使用 SSH 安全地使用远程桌面连接到 Windows
操作环境
- 远程连接到 Windows
-
- 窗户11
- 从 Windows 远程连接
-
- 视窗 10
- OpenSSH的
-
- OpenSSH_for_Windows_8.1p1、LibreSSL 3.0.2
先决条件
- 远程连接到 Windows
-
- Windows 10 或更高版本(需要专业版或其他版本)。 但是,如果 OpenSSH 可以单独准备,则不适用。
- Windows Server 2019 或更高版本。 但是,如果 OpenSSH 可以单独准备,则不适用。
- 从 Windows 远程连接
-
- Windows(大多数版本都是可能的)
- Windows Server(大多数版本都是可能的)
起先
在云端或 VPS 的 Internet 上构建 Windows 环境后,您通常会使用远程桌面连接来操作远程 Windows 目标。
在远程桌面连接中,通信内容是加密的,如果用户名和密码没有泄露,其他人不会在未经许可的情况下登录。 人们总是担心人们会尝试从任何地方登录。
一些主流云的防火墙与虚拟机是分开的,并且有限制连接源的功能。 这些功能可能并非在所有服务中都可用。 特别是在预算较低的环境中,在许多情况下,此类功能不可用。
因此,这一次,我想通过添加 SSH 功能来尽可能地限制连接源。 由于使用了私钥和公钥,只要私钥不泄露,就可以尽可能地减少从其他环境远程登录的可能性。
在这种情况下,我们将使用 OpenSSH 来构建 SSH 环境。
构建远程目标 Windows 环境
构建允许您通过 Internet 进行远程连接的 Windows 环境。 只要它通过 Internet 构建,它在哪里构建并不重要,但对于此验证,它将在 Microsoft Azure 上构建为虚拟机。 在 Azure 上构建的步骤与此提示无关,因此我将省略它们。 由于这次将使用端口 22,因此如果使用 Azure,请确保端口 22 通信通过 Azure 上虚拟机的设置。
如果要在 Azure 以外的环境中进行构建,请确保可以为你的环境与 Windows 建立远程桌面连接。
此外,Windows 版本面向 Windows 10 或更高版本,或者 Windows Server 2019 或更高版本,这使得构建 OpenSSH 环境变得容易。 它可以在早期的环境中实现,但需要更多的时间和精力,因为您需要单独下载和设置 OpenSSH。
在这种情况下,过程与 SFTP 相同,因此请参考以下提示。
设置 OpenSSH
从这里开始,我们将在远程 Windows 环境中工作。 首先,使用远程桌面连接连接到远程目标。 如果您的云或 VPS 提供控制台,您可以使用它。 由于我们这次是在 Windows 11 环境中运行,因此其他版本的步骤可能略有不同。
打开“开始”菜单,然后选择“设置”。
选择一个应用。
选择可选功能。
选择“显示功能”。
列表中有“OpenSSH服务器”,因此请检查它并单击“下一步”。
单击“安装”。
安装完成后,将“OpenSSH Server”添加到下面的列表中,您就完成了。
OpenSSH 的服务配置
右键单击“开始”菜单,然后选择“计算机管理”。
从左侧列表中选择服务。
在中间列表中找到“OpenSSH SSH Server”,右键单击并选择“属性”。
远程连接时,我们希望 OpenSSH 服务器正在运行,因此将“启动类型”设置为“自动”。
由于它目前没有运行,我将在这里启动它,包括设置它。
启动后,单击 OK 按钮将其关闭。 它应该在列表中运行。
配置 OpenSSH
在初始状态下,私钥身份验证被禁用,因此请设置它。 在资源管理器中打开以下文件夹。
- C:\ProgramData\ssh
但是,上面的文件夹可能是一个隐藏文件夹,因此请通过设置资源管理器选项使其可见。
文件夹中有一个名为 sshd_config
的文件,因此请使用记事本等文本编辑器打开它。
由于我们这次将进行更改,因此请在更改前复制并复制作为 sshd_config_old
备份。
PubkeyAuthentication yes
寻找:
此项是用于是否启用密钥身份验证的设置。
默认情况下,它被禁用并显示 ,但它被注释掉了, yes
所以取消注释。
更改前
#PubkeyAuthentication yes
更改后
PubkeyAuthentication yes
PasswordAuthentication yes
寻找:
此项是是否启用密码认证的设置。
它默认处于启用状态,即使您启用私钥身份验证,如果保持启用状态,从安全角度来看也毫无意义,因此请取消注释并 no
设置 .
更改前
#PasswordAuthentication yes
更改后
PasswordAuthentication no
在末尾附近注释掉以下行: 这是管理员组的关键设置,我们将禁用它,因为在这种情况下,我们将支持每用户登录。
更改前
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
更改后
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
更改后 OpenSSH SSH Server
保存文件后,重新启动服务以反映设置。
如果要更改端口
如果要更改 SSH 端口,请更改以下内容。
更改前
#Port 22
更改后
#Port <任意の番号>
通过更改端口号,默认端口不会受到攻击,这将导致更强的安全性。 另一方面,它增加了操作的复杂性,因此您需要小心。
如果更改端口号,则必须在连接时指定 22 以外的端口。
创建私钥和公钥
这是一项客户端任务。 但是,您在哪里工作并不重要。 但是,请注意不要泄露您创建的私钥。
如果你有 Windows 10 或更高版本、Windows Server 2019 或更高版本,则默认安装 OpenSSH 客户端,因此你可以使用命令轻松创建它。 在其他环境中,您将需要安装单独的 OpenSSH 客户端或使用单独的工具。
以下提示适用于 SFTP,但请参考它们来设置 OpenSSH 客户端。
在客户端环境中,启动命令提示符、PowerShell、终端或任何可以执行命令的工具。
由于您将创建一个文件,因此请使用命令移动到 cd
任何目录。
运行以下命令:
ssh-keygen -t rsa -f id_rsa
您可以为密钥设置密码,因此如有必要,请输入密码。 如果设置密码,安全性将得到增强,但会增加在后续过程中输入密码的时间和精力。
已创建公钥 (id_rsa.pub) 和私钥 (id_rsa)。
公钥 (id_rsa.pub) 稍后将放置在远程目标上。 私钥可以位于远程客户端上的任何位置,但必须位于只能由用于安全目的的帐户访问的文件夹中。 基本上,我认为如果您将其放在客户端的以下文件夹中,则没有问题。 如果您使用 OpenSSH 客户端,默认情况下它将浏览到此文件夹。
C:\Users\<ユーザー名>\.ssh
如果无法在资源管理器中创建上述文件夹,可以使用以下命令创建它。
cd C:\Users\<ユーザー名>
mkdir .ssh
公钥的放置
这是一项远程操作。
将创建的公钥 (id_rsa.pub) 放在远程目标上。
将此文件移动到以下文件夹: <ユーザー名>
是实际远程连接时将登录的用户帐户的名称。
C:\Users\<ユーザー名>\.ssh
如果没有文件夹,并且无法在资源管理器中创建文件夹,则可以使用以下命令创建文件夹。
cd C:\Users\<ユーザー名>
mkdir .ssh
将已部署的公钥文件 authorized_keys
更改为 。 就是这样。
根据您的环境,您可能已经 authorized_keys
拥有该文件。 如果您出于其他目的设置了 SSH 连接,则可能会出现这种情况。
在这种情况下 authorized_keys
,您已经注册了文件,方法是打开文件和使用记事本等文件,并在 id_rsa.pub
authorized_keys的下一行列出 id_rsa.pub 的内容。
您可以在 authorized_keys 中注册多个公钥。
使用 SSH 进行连接
使用 OpenSSH 命令连接时
有多种方法可以连接 SSH,但让我们从基于命令的连接开始。 实际上,步骤数最少的连接是通过命令进行的。 作为先决条件,您必须安装 OpenSSH 客户端。
启动所选的命令工具(命令提示符、PowerShell、终端)。
输入以下命令:
命令格式
ssh -i <秘密鍵ファイルパス> -L <ローカルの空いているポート>:127.0.0.1:3389 <接続先のユーザーアカウント名>@<接続先サーバーIPアドレス、またはホスト名>
以下是参数说明。 根据您的环境进行设置。
变量参数名称 | 说明 | |
---|---|---|
SSH的 | 将 SSH 与 OpenSSH 一起使用的声明。 | |
-我 | 使用私钥文件的声明。 | |
<私钥文件路径> | ● | 描述您创建的私钥文件的位置。 C:\Users\<ユーザー名>\.ssh 路径是可选的。 否则,需要绝对路径或相对路径。 |
-L | 此声明指定连接到远程目标时要在本地和远程使用的端口。 | |
<当地的自由港> | ● | 远程桌面连接通常使用端口 3389,但你可以使用任何端口进行连接。 不管它是什么号码,只要它是免费的。 |
127.0.0.1 | 这是识别远程目标连接位置的主机 IP 地址。 基本上,127.0.0.1 就可以了。 | |
3389 | 要在远程目标处使用的端口号。 远程目标通常通过端口 3389 与远程桌面连接进行连接,因此可以保持原样。 | |
<要连接到的用户帐户的名称> | ● | 指定要在远程目标连接到的帐户。 |
<要连接到的服务器的 IP 地址或主机名> | ● | 指定远程目标服务器。 |
示例输入
ssh -i id_rsa -L 13389:127.0.0.1:3389 TestUser@52.140.221.194
第一次,系统会提示您输入一个键,因此 yes
请键入并按 Enter。
如果您为私钥设置了密码,则必须输入密码。
以下内容将处于连接状态。 您可以看到显示的是服务器端的用户,而不是客户端。 显示此窗口时,它已连接,因此请不要关闭它。 如果关闭它,连接将断开。
与 PuTTY 连接时
在这里,我们将尝试使用名为 PuTTY 的工具连接到 SSH。
转换私钥
首先,如果您使用 PuTTY,则需要转换私钥。 我认为附加工具中有“puttygen .exe”,所以请启动它。
从菜单中选择“转换 -> 导入密钥”。
选择您创建的私钥,在本例中为“id_rsa”。
如果您设置了密码,请输入该密码。
从菜单中选择“文件 -> 保存私钥”。
「. .ppk“文件。
创建完成后,您就完成了。
配置 PuTTY
启动 putty.exe。
输入要连接到的环境的 IP 地址。 如果您有域名,则可以使用域名进行连接。
从左侧菜单中选择“连接”->“数据”。 在“自动登录用户名”字段中,输入要连接到的环境的帐户名称。
从左侧菜单中,选择“连接”-“>”SSH“-”> 隧道”。 在下面的输入字段中输入它们中的每一个,然后单击“添加”按钮。
参数名称值 | 注解 | |
---|---|---|
源端口 | 13389 | 任何自由港都可以。 我稍后会用到 |
目的地 | 127.0.0.1:3389 |
添加后,它应如下所示:
接下来,从左侧菜单中选择“连接 -> SSH -> 身份验证 -> Cledentioals”,然后单击“用于身份验证的私钥文件”的“浏览”按钮。
选择已保存的私钥。
在左侧菜单中选择“会话”,为“保存会话”输入您选择的名称,然后单击“保存”按钮。 从下次开始,如果加载此设置是可以的。
确认保存后,单击“打开”按钮。
首次连接时将显示以下屏幕。 单击“接受”按钮。
您将看到一个看起来像命令提示符的屏幕。 如果您有私钥的密码,请输入该密码。
如果显示内容如下图所示发生变化,则将连接。 您可以看到显示的是服务器端的用户,而不是客户端。 显示此窗口时,它已连接,因此请不要关闭它。 如果关闭它,连接将断开。
使用 SSH 建立远程桌面连接
现在,让我们在使用 SSH 连接时建立远程桌面连接。
连接时,计算机部分不是实际的远程地址,而是“localhost:< >SSH连接中指定的端口名”。 在示例中,指定了 13389,因此在这里我们将连接到“localhost:13389”。
如果显示身份验证屏幕,则可以判断连接是否完成。 输入您的用户名和密码进行连接。
如果你能像这样连接,你就成功了。
在防火墙设置中禁用常规远程桌面连接
在上一项时,您现在可以使用 SSH 与远程桌面连接。 但是,在此状态下,“通过 SSH 进行远程桌面连接”仅添加到“正常远程桌面连接”中。 在安全性方面,它没有增加任何东西。 因此,接下来要做的就是防止“正常的远程桌面连接”。
如果进行此设置,则除了“通过SSH进行远程桌面连接”外,您将无法进行连接,因此,如果您弄乱了设置,则可能无法进行远程连接。 因此,请务必提前检查“通过SSH进行远程桌面连接”是否可能,并且即使您尝试连接的客户端消失,也能够通过其他方式操作远程环境。
在这里,在“通过 SSH 进行远程桌面连接”中配置防火墙设置。 这是因为如果您使用“正常远程桌面连接”执行操作,它将在您设置防火墙的那一刻断开连接。
查看具有高级安全性的Windows Defender防火墙。 根据 Windows 版本的不同,显示器的位置会有所不同,因此请根据该版本进行显示。
从左侧菜单中选择入站规则。
在中间列表中,找到“远程桌面 - 用户模式(TCP 输入)”并打开其属性。
选择“作用域”选项卡,将“本地 IP 地址”更改为“这些 IP 地址”,然后单击“添加”按钮。
输入 127.0.0.1 并单击确定按钮。 这将阻止来自 127.0.0.1 以外的任何位置的远程桌面连接。 127.0.0.1 是指向您的计算机的 IP 地址。 如果输入错误的值,则可能无法从任何地方进行连接,因此请小心。
点击 OK 按钮进行确认。
目前,仅此一项就是一种对策,但我们也设置了“远程桌面 - 用户模式(UDP 接收)”。
验证是否无法使用 SSH 以外的任何设备进行远程连接
现在,尝试从另一台未使用 SSH 的电脑建立远程桌面连接。
如果可以连接,将显示身份验证屏幕。 如果您可以确认无法进行连接,如下所示,则可以。
总结
使用最新的 Windows,现在可以轻松引入 SSH 服务器。 通过添加设置,您现在可以轻松提高远程桌面连接的安全性。 但是,由于它只负责 Windows 本身的安全措施, 如果你想让它更安全,我认为最好在连接到 Windows 之前设置一个单独的 SSH 服务器或防火墙。
此外,您可以使用SSH严格设置安全性,但是当它太难时,由于操作错误,没有人可以连接。 小心不要以此结束。