什么安全设置阻止了远程PowerShell 2.0访问UNC路径

16
这太疯狂了,我要开始学习PowerShell。当然,我需要远程进行管理员工作。
一个简单的:
dir \\server\share\folder

代码根本无法运行,我遇到了这个错误

Get-ChildItem : Cannot find path '\\server\share\folder' because it does not exist.
    + CategoryInfo          : ObjectNotFound: (\\server\share\folder:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

对我来说很明显这是一个访问权限问题。我们公司有一个域。我已经用与VNC相同的用户帐户登录到服务器,并且可以看到UNC路径。但是每当我尝试通过远程连接从我的桌面复制文件时,它就无法工作!!!

我可以做许多其他事情,所以我确定我已连接成功。


在 DOS Shell 命令中执行 'dir \server\share\folder' 不会出现错误吗? - CB.
没错。也许我应该写成 "dir \MyServer\MyShare\MyFolder"。我发现我需要设置CredSSP,我已经设置了,但仍然出现超时,随后是Enable-WSManCredSSP:此命令无法执行,因为无法启用该设置。如果没有网络连接,则可能会发生这种情况。 - Arturo Hernandez
到目前为止,我已经使用gpedit.msc在两台计算机上允许新凭据。我设置了新凭据策略,并使用enable-wsmancredssp -role client -delegatecomputer computer1.domain.comenable-wsmancredssp -role server命令。要获取状态,我执行“Get-WSManCredSSP”,然后得到以下信息: 该计算机已配置为允许委派新凭据到以下目标:wsman/computer1.domain.com,wsm an/*.domain.com。该计算机已配置为从远程客户端计算机接收凭据。我找不到其他要做的事情,但它仍然无法正常工作! - Arturo Hernandez
2个回答

17

要让它工作,你必须配置本地计算机和远程计算机。

在远程服务器上,运行以下命令:

 Enable-WSManCredSSP -Role server

如果您运行Get-WSManCredSSP命令并获得以下输出,则说明配置正确:

该计算机未配置为允许委派新凭据。 该计算机已配置为从远程客户端计算机接收凭据。

在本地计算机上,从管理员PowerShell提示符中,您需要在PowerShell中允许凭证委派。运行以下命令:

 Enable-WSManCredSSP -Role Client -DelegateComputer <REMOTE_COMPUTER_NAME>

你可以使用*代表REMOTE_COMPUTER_NAME启用所有服务器。

当你运行Get-WSManCredSSP并获得以下输出时,你就知道配置正确了:

该计算机已配置为允许将新凭据委派给以下目标:wsman/REMOTE_SERVER_NAME
此计算机未配置为从远程客户端计算机接收凭据。

在本地计算机上,更新组策略以允许将你的凭据委派给远程服务器。

  1. 打开gpedit.msc并浏览到计算机配置>管理模板>系统>凭据委派。
  2. 双击“仅使用NTLM服务器身份验证允许委派新凭据”。
  3. 启用该设置并将构建服务器添加到服务器列表中作为WSMAN / BuildServerName。(您可以通过输入WSMAN / *来启用所有服务器。)

然后,当你需要在远程服务器上运行命令时,你不能使用任何*-PSSession命令,因为CredSSP无法使用缓存的凭据。你必须使用Invoke-Command作为Authentication参数的值启动会话,并使用CredSSP,如下所示:

Invoke-Command -ScriptBlock { # remote commands here } `
               -ComputerName <REMOTE_COMPUTER_NAME> `
               -Authentication CredSSP `
               -Credential <USERNAME>

1
非常好的回答,提供了很多有用的信息,谢谢!不幸的是,我仍然有一个问题。我已经在组策略中进行了更改,但是当我在提升的PS窗口中运行以下命令时:“Enable-WSManCredSSP -role Client -DelegateComputer d-vasbiz01 -force”,我收到以下错误消息:“Enable-WSManCredSSP:无法执行此命令,因为无法启用设置”,有什么想法吗? - Rob Bowman
我找到了!问题出在组策略编辑器中,我需要在委派给的服务器名称前加上“wsman/”。这正如答案所述,但我错过了它!非常感谢您的回答。 - Rob Bowman
1
我不需要执行“组策略”步骤,只需在正确的计算机上启用“客户端”和“服务器”角色即可。 - rob

0

Powershell在运行远程脚本时也使用Internet Explorer的安全设置。

我发现,无论您要尝试运行远程脚本的机器是什么,如果我将远程机器的UNC路径添加到我的受信任的内部网站中,那么我就可以运行脚本了(假设我的posh执行策略设置为remotesigned...."set-executionpolicy remotesigned")。

我为多个具有和不具有SQL的服务器进行大量管理,但我从未使用过Enable-WSManCredSSP。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接