Powershell 使用公司代理远程调用Invoke WebRequest时出现问题

Powershell 使用公司代理远程调用Invoke WebRequest时出现问题,powershell,proxy,Powershell,Proxy,我的公司网络中有两台机器。所有的网络流量都通过我们的公司代理,这需要使用登录名和密码进行身份验证 这两台机器都位于公司防火墙和代理之后。 在机器1中,我在Powershell profile.ps1文件中有以下代码段: $proxyString = "http://our.proxy.corp:8080" $proxyUri = new-object System.Uri($proxyString) [System.Net.WebRequest]::DefaultWebProxy = new-o

我的公司网络中有两台机器。所有的网络流量都通过我们的公司代理,这需要使用登录名和密码进行身份验证

这两台机器都位于公司防火墙和代理之后。

在机器1中,我在Powershell profile.ps1文件中有以下代码段:

$proxyString = "http://our.proxy.corp:8080"
$proxyUri = new-object System.Uri($proxyString)
[System.Net.WebRequest]::DefaultWebProxy = new-object System.Net.WebProxy ($proxyUri, $true)
[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
前面的代码段确保为多个commandlet(包括Invoke-WebRequest)设置代理配置

当从计算机1中的本地powershell会话调用
调用WebRequest
时,web请求将正常执行:

​C:\ > Invoke-WebRequest https://www.youtube.com

StatusCode        : 200
StatusDescription : OK
当我在机器1上远程执行来自机器2的相同命令时,我得到以下错误:

Invoke-Command -ScriptBlock { Invoke-WebRequest http://www.youtube.com } -ComputerName Machine 1

Access Denied (authentication_failed)
Your credentials could not be authenticated: "General authentication failure due to bad user ID or authentication
token.". You will not be permitted access until your credentials can be verified.
This is typically caused by an incorrect username and/or password, but could also be caused by network problems.
For assistance, contact your network support team.
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebExc
   eption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
    + PSComputerName        : Machine 1
在计算机1上远程调用命令时,似乎未加载代理配置

我试过:

  • 远程调用时显式寻源配置文件
  • 使用-Proxy和-ProxyCredentials选项
  • 直接在代理url“”中指定凭据
但我总是犯同样的错误


我遗漏了什么?

很确定这是由于Kerberos双跳问题造成的。根据您对执行的描述:“当我在机器1上远程执行来自机器2的相同命令时…”

这是来自凭证缓存页面的:

DefaultCredentials属性仅适用于NTLM、协商和 基于Kerberos的身份验证

因此,简而言之,包含所有安全信息的Kerberos令牌无法传递到第二台计算机*因为Kerberos的工作方式--远程计算机从未在内存中为远程连接的用户接收到实际令牌,因此远程计算机上没有任何可供再次转发的操作。在本例中,将连接到代理服务器

注意事项:

  • PowerShell提供了一种解决方法(CredSSP),但它是一种非常不安全的技术,会在您的环境中为密码盗窃、横向移动等打开安全漏洞——我不推荐它
资料来源:


很确定这是由于Kerberos双跳问题造成的。根据您对执行的描述:“当我在机器1上远程执行来自机器2的相同命令时…”

这是来自凭证缓存页面的:

DefaultCredentials属性仅适用于NTLM、协商和 基于Kerberos的身份验证

因此,简而言之,包含所有安全信息的Kerberos令牌无法传递到第二台计算机*因为Kerberos的工作方式--远程计算机从未在内存中为远程连接的用户接收到实际令牌,因此远程计算机上没有任何可供再次转发的操作。在本例中,将连接到代理服务器

注意事项:

  • PowerShell提供了一种解决方法(CredSSP),但它是一种非常不安全的技术,会在您的环境中为密码盗窃、横向移动等打开安全漏洞——我不推荐它
资料来源:


    • 对于一个简单的评论来说,这太长了,但要补充到IP3R的有用答案中,这个双跳问题不是PowerShell问题,而是Windows本身的限制

      然而,有几篇关于双跳身份验证问题的文章已经发表了一段时间了,讨论的是我们使用PowerShell时遇到的问题。直接来自微软、微软现场工作人员、前工作人员以及其他人。如果CredSSP受到阻碍,您可以通过快速网络搜索找到一些“PowerShell double hop”,以供您考虑(并与您的管理层和团队成员进行讨论),从我不得不解决这一问题的时候起,它将受到影响

      …用于处理基于资源的Kerberos的帮助器函数 受约束的委派(RB KCD)和PowerShell远程处理:

      • 启用RBKCD、禁用RBKCD、获取RBKCD
      • 在我的GitHub上获取文件和幻灯片
      RB KCD使用一组有限的命令和函数运行 在内核上下文中的系统帐户下

      RB KCD不支持WinRM/PowerShell远程处理,因为它运行 在网络帐户下


      这对于一个简单的评论来说太长了,但要添加到IP3R的有用答案中,这个双跳问题不是PowerShell问题,而是Windows本身的限制

      然而,有几篇关于双跳身份验证问题的文章已经发表了一段时间了,讨论的是我们使用PowerShell时遇到的问题。直接来自微软、微软现场工作人员、前工作人员以及其他人。如果CredSSP受到阻碍,您可以通过快速网络搜索找到一些“PowerShell double hop”,以供您考虑(并与您的管理层和团队成员进行讨论),从我不得不解决这一问题的时候起,它将受到影响

      …用于处理基于资源的Kerberos的帮助器函数 受约束的委派(RB KCD)和PowerShell远程处理:

      • 启用RBKCD、禁用RBKCD、获取RBKCD
      • 在我的GitHub上获取文件和幻灯片
      RB KCD使用一组有限的命令和函数运行 在内核上下文中的系统帐户下

      RB KCD不支持WinRM/PowerShell远程处理,因为它运行 在网络帐户下


      你确定这不是臭名昭著的Kerberos双跳问题吗?编辑:我松散地说“臭名昭著”,因为它是为安全而设计的。使用这个词没什么错。它已经被许多其他人公开使用过很多次。例如,PowerShell中臭名昭著的双跳问题-----意外破坏:当心CredSSP–PowerShell杂志-----你确定这不是臭名昭著的K吗