当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 在工作组中掌握 PSRemoting:顺利运行命令

作者:精品下载站 日期:2024-12-14 13:05:50 浏览:15 分类:玩电脑

在工作组中掌握 PSRemoting:顺利运行命令


PSRemoting 是在远程计算机上运行命令的好方法,但如果您不在 Active Directory (AD) 域中,身份验证就不那么简单了。如果您没有可用的 Kerberos,工作组中的 PSRemoting 需要进行一些设置。

在本教程中,您将学习使用工作组中的客户端和服务器的用户名和密码设置 PSRemoting 连接所需的所有步骤。

相关:PowerShell 远程处理:终极指南

先决条件

如果您想继续操作,请确保您事先准备好以下物品:

  • 充当客户端的 Windows 7+ 计算机。本教程将使用 Windows 10 build 20H2。
  • 一台 Windows 7+ 计算机充当服务器。本教程将使用 Windows Server 2019。
  • 访问客户端和服务器上的管理用户帐户。

PSRemoting 工作组问题

AD 中的 PSRemoting 可以无缝运行。如果客户端和服务器都加入了域,并且您拥有适当的权限,则只需运行 Invoke-Command 即可运行。

请注意,您只需使用 ComputerNameScriptBlock 参数。假设服务器上已启用 PSRemoting,它就可以正常工作。

Invoke-Command -ComputerName SRV -ScriptBlock { Write-Host 'I am running on the remote server.' }

相关:Invoke-Command:运行远程代码的最佳方式

当客户端和服务器都加入域时,他们可以使用 AD 来验证对方是否是他们所说的身份。这已融入 Kerberos 身份验证方法中,并在 AD 环境中随处使用。

当您将域从混合中取出时,问题就开始了。现在您只有一种对客户端进行身份验证的方法(使用密码),而没有一种对服务器进行身份验证的方法。这是我们需要解决的真正安全问题。

潜在的解决方案

要在工作组中设置 PSRemoting 需要几种不同的潜在解决方案;使用受信任的主机列表(如下所述)或设置 HTTPS/SSL 连接。

正如您将在本教程中看到的,使用受信任的主机是最简单的途径。客户端有一个它信任连接的主机名或 IP 地址列表。此列表允许 PowerShell 绕过典型的服务器连接验证。

不建议在生产中使用可信主机方法,因为它远不如使用 SSL 以“正确”方式配置 WinRM 安全。

您还可以使用 HTTPS 设置 WinRM。 HTTPS 提供了一种通过用于 HTTPS 连接的证书来验证服务器身份的方法。这是首选方式,但它确实需要公钥基础设施。

虽然可以使用自签名证书进行 HTTPS 连接,但此方法不会验证服务器。该自签名证书可能来自您不信任的人。

在工作组中设置 PSRemoting

尽管有点复杂,但您仍然在工作组中设置 PSRemoting。您需要建立信任并配置防火墙才能连接。让我们开始使用可信主机。

打开防火墙

当客户端和服务器都是域的一部分时,两者都将使用域网络配置文件。默认情况下,域网络配置文件允许来自任何子网的连接。当客户端和服务器都在一个工作组中时,情况就会发生变化。这些计算机将位于限制流量的公共或专用网络配置文件上。

如果客户端和服务器都运行 Windows Server 并且位于同一子网上,则无需更改防火墙。

如果您使用客户端操作系统作为目标,或者您的客户端和服务器位于不同的子网上,则需要检查您设置的网络配置文件。在服务器上运行Get-NetConnectionProfile,您应该得到与此类似的输出。

[玩转系统] 在工作组中掌握 PSRemoting:顺利运行命令

如果网络类别设置为“公共”并且您使用的是客户端操作系统(例如 Windows 10),则必须运行“Enable-PSRemoting -SkipNetworkCheck”。如果您使用的是服务器操作系统,例如 Server 2019,则不需要包含 -SkipNetworkCheck

如果您需要能够在公共网络上从不同的子网与工作组中的 PSRemoting 进行连接,请在目标计算机上运行以下命令。

$FirewallParam = @{
    DisplayName = 'Windows Remote Management (HTTP-In)'
    Direction = 'Inbound'
    LocalPort = 5985
    Protocol = 'TCP'
    Action = 'Allow'
    Program = 'System'
		Profile = 'Public'
}
New-NetFirewallRule @FirewallParam

为 HTTP 连接设置可信主机

受信任的主机列表是 WinRM 客户端使用的主机名和/或 IP 地址的列表,以确定您是否信任您尝试连接的服务器。您可以通过运行以下命令来查看此列表。

Get-Item WSMan:\localhost\Client\TrustedHosts

可信主机列表应该是最后的手段。将主机添加到此列表会告诉 PowerShell 您完全信任这些主机。如果服务器有某种方法通过 HTTPS 连接或 Kerberos 来检查有效性,则不应将其添加到此列表中。

假设您尝试连接到不受信任的服务器。如果是这样,您将看到以下错误消息。

[玩转系统] 在工作组中掌握 PSRemoting:顺利运行命令

为了防止出现该错误并允许您进行连接,请使用 Set-Item cmdlet 并引用 WSMAN PowerShell 驱动器将远程服务器添加到 TrustedHosts 列表中,如下所示。

下面的示例将名为 ServerB 的远程服务器连接到 TrustedHosts 列表。由于 TrustedHosts 列表可以包含许多不同的主机,因此使用 Concantenate 参数会附加主机名,而不是覆盖整个列表。

Set-Item WSMan:\localhost\Client\TrustedHosts -Value 'ServerB' -Concatenate

如果可能,请始终使用单独的服务器名称。您还可以使用通配符,例如 192.168.1。。但使用通配符并自动信任所有服务器并不是最佳的安全决策。

将主机添加到 TrustedHosts 列表的唯一原因是您要设置 HTTP 连接。 PowerShell 具有这种机制,因为可以使用身份验证方法将密码公开给远程服务器。作为更安全的替代方案,您可以设置 HTTPS 侦听器。

您还可以通过运行以下命令清除列表以将其恢复为空。

Set-Item WSMan:\localhost\Client\TrustedHosts -Value ''

在服务器上启用 PS 远程处理

尽管 PS Remoting 通常默认启用,但您可能需要手动启用它。要启用 PS Remoting,请登录服务器并在 PowerShell 中运行以下命令:

Enable-PSRemoting -Force

连接到 WinRm 服务器

将主机名添加到客户端上的受信任主机列表后,您应该能够连接到工作组中的服务器。

要连接到服务器,请在 PSRemoting 命令(例如 Invoke-CommandEnter-PSSession)上使用 Credential 参数。

相关:Invoke-Command:运行远程代码的最佳方式

请务必提供服务器的本地用户名和密码,并在所提供的凭据中提供连接权限。

默认情况下,服务器上远程管理用户和管理员组中的所有本地用户都会通过 PSRemoting 向服务器进行身份验证。

[玩转系统] 在工作组中掌握 PSRemoting:顺利运行命令

下一步

既然您已经在工作组中设置了 PSRemoting 并且了解了要点,为什么不考虑使用 HTTPS 设置 WinRM 或者真正深入研究 PSRemoting通过查看PowerShell Remoting Ultimate Guide帖子?

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯