如何解决 PowerShell 的双跳问题:完整指南

您是否曾尝试在 PowerShell 远程会话中访问远程资源,却遭遇令人沮丧的访问被拒绝障碍?这个常见问题被称为“双跳”问题,它阻止您从当前会话访问第二台远程机器。

好消息是,有办法在不进行过于复杂的配置的情况下解决双跳问题。在本教程中,您将构建一个自定义会话,轻松处理身份验证,节省时间和精力,同时保持安全性。

通过会话配置克服双跳问题,并简化您的工作流程!

以不同用户身份运行 PowerShell

如果您正在处理连接到远程资源的脚本,可能会遇到双跳问题。当您的凭据在远程连接的第一个跳跃之后无法进行身份验证时,就会发生此问题。

例如,考虑一个使用 UNC 路径在远程计算机上计算子目录的脚本:

(Get-ChildItem -Path \\SRV2\c$ -Directory).Count

如果您登录的用户没有访问某个资源的权限,您可以以不同的用户帐户运行 PowerShell:

  1. 在开始菜单中搜索 PowerShell。
  2. 右键单击 PowerShell 快捷方式,并选择 打开文件位置
  3. 在文件资源管理器中,按住 Shift 键,右键单击快捷方式,并选择 以不同用户身份运行
  4. 输入具有必要权限的用户的凭据。

在以不同用户身份启动 PowerShell 之后,命令现在应该成功执行:

(Get-ChildItem -Path \\SRV2\c$ -Directory).Count

提示如果您经常使用不同的凭据运行命令,请考虑使用 Start-Process cmdlet 及 -Credential 参数。这种方法允许您直接从控制台使用备用凭据打开新的 PowerShell 会话。


测试远程连接

在处理多个远程系统时,您可能会成功地在本地访问远程资源,例如共享文件夹。但随后您发现相同的命令在从第二台远程计算机执行时产生了“访问被拒绝”的错误。

这种不一致可能会令人困惑,尤其是当您确信您的凭据具有足够的权限时。

要测试您的远程连接,请与另一台计算机建立会话:

Enter-PSSession -ComputerName SRV3

连接后,尝试在第二台机器上运行相同的命令:

(Get-ChildItem -Path \\SRV2\c$ -Directory).Count

即使您使用具有权限的帐户,这个测试通常也会导致“访问被拒绝”的错误。

使用以下命令确认您当前的用户:

whoami

这种行为(双跳)发生是因为 PowerShell 不会将您的凭据传递到下一个跳跃。这种机制是内置于 Kerberos 认证中的安全特性,但在管理多个系统时可能会带来很大的麻烦。

通过会话配置解决双跳问题

解决双跳问题的一种方法是在中间计算机上创建会话配置。

首先在您要连接的计算机上注册会话配置,在本例中是 SRV3。

以下命令:

  • 为会话配置分配一个Name(例如,Admin)。
  • 指定会话将在其下运行的账户(RunAsCredential)。
  • 确保(Force)应用配置并重新启动 WinRM 服务。
Invoke-Command -ComputerName SRV3 -ScriptBlock {
    Register-PSSessionConfiguration -Name Admin -RunAsCredential 'psforsysadmins.local\adam' -Force
}

PowerShell 会提示您输入RunAsCredential账户的密码,该密码将安全地存储在远程计算机上。配置注册后,WinRM 服务会重新启动并关闭会话。

配置就绪后,您现在可以使用ConfigurationName参数连接:

Invoke-Command -ComputerName SRV3 -ScriptBlock {
    (Get-ChildItem -Path \\SRV2\c$ -Directory).Count
} -ConfigurationName Admin

此命令执行与之前相同的操作。然而,它指定Admin会话配置,并在指定的管理员账户下运行。


提示: 使用Set-PSSessionConfiguration命令定义用户或组特定的访问权限,限制对会话配置的访问。这样做可以确保只有授权用户才能利用配置。


结论

在本指南中,您已了解并解决了 PowerShell 远程的双跳问题。设置会话配置可以解决双跳问题,并确保安全地传递凭据。

这个解决方案是持久的,即使在重新启动后,您也可以重复使用配置,这使得管理远程 PowerShell 会话变得更加可靠。现在,您可以自信地管理多跳远程操作,并在不牺牲安全性的情况下简化工作流程。

从这里开始,考虑探索高级安全选项,例如限制会话访问或实施基于证书的身份验证。这些增强功能可以进一步加强您的远程设置,同时灵活地管理复杂环境。

Source:
https://adamtheautomator.com/powershell-double-hop-fix/