【问题标题】:Powershell Server Network drivePowershell 服务器网络驱动器
【发布时间】:2014-12-04 12:57:14
【问题描述】:

我有一个客户端和一个服务器。客户端将调用如下脚本:

#Predefine necessary information
$Username = "Niels"
$Password = "password"
$ComputerName = "192.168.1.51"
$Script = {powershell c:/build/jclbuild2.bat}

#Create credential object
$SecurePassWord = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $Username, $SecurePassWord

#Create session object with this
$Session = New-PSSession -ComputerName $ComputerName -credential $Cred

#Invoke-Command
$Job = Invoke-Command -Session $Session -Scriptblock $Script 
echo $Job

#Close Session
Remove-PSSession -Session $Session

在服务器上jclbuild2.bat 将运行并访问像\\otherserver\something 这样的网络驱动器,如果我执行此命令,它会说访问被拒绝:

cmd.exe /C copy "\\server\file1.pdf" "\\server2\file1.pdf"

如何从远程服务器上的 powershell 文件访问网络驱动器?我使用 $username 和 $password 的用户应该可以访问网络驱动器。

我认为这是一个双跳问题,我不知道如何解决。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您无法使用默认身份验证机制执行此操作。您需要使用一种身份验证机制,该机制允许您传输凭证,而不仅仅是身份。 Kerberos 就是其中之一。 CredSSP 是从 Vista/Server 2008 开始内置于 Windows 中的另一个。

    我有设置 CredSSP 的经验。请注意,存在一些安全风险,因为目标计算机可以以纯文本形式访问凭据。

    要设置它,您需要运行两个命令(都来自提升的 shell)。一个在您正在运行上述脚本的机器上(客户端),另一个在您将通过远程处理连接到的目标(服务器)上。

    Enable-WSManCredSSP -Role Client -DelegateComputer $ComputerName -Force
    

    这允许从客户端委托给 $ComputerName(注意您可能必须使用 FQDN)。出于安全原因,您应该避免使用通配符 '*',尽管您可以考虑使用 '*.mydomain.int' 来启用对域中所有计算机的委派。

    在目标服务器上

    Enable-WSManCredSSP -Role Server
    

    然后在创建会话时使用 -Authentication 标志

    $Session = New-PSSession -ComputerName $ComputerName -credential $Cred -Authentication Credssp
    

    ServerFault 上有关于设置 CredSSP 的问题。还有一篇博文here 有额外的解释。此post 提供了一些常见错误消息的故障排除提示。

    【讨论】:

    • 我收到一些 WSMAN 错误。无法将目标计算机的身份验证为 WSMAN-servce。
    • @Niels 哪个命令失败了?有关其他信息,请参阅this。我记得当我设置它时,有很多关于 FQDN 的争论。在创建会话时,您可能还必须使用 FQDN。
    • 我修好了。当我添加 -Authentication 时出现了一个奇怪的错误,然后我简化了我的脚本并且它起作用了。谢谢!
    【解决方案2】:

    另一种选择是在您的服务器上使用委托会话。

    基本上,您创建一个自定义远程会话,该会话使用 -RunAs 参数指定会话将在其下运行的凭据。您还可以限制可以在会话中运行哪些脚本和 cmdlet,并指定谁可以连接到会话。

    在这种情况下,会话将作为 Niels 帐户运行,并且在会话中完成的所有操作都将在该帐户权限下进行,无论谁连接到会话。从该会话中,您现在可以在不需要 CredSSP 的情况下跳到另一台服务器。

    这也消除了将该帐户密码存储在客户端计算机上的脚本文件中所涉及的安全风险。

    http://blogs.technet.com/b/heyscriptingguy/archive/2014/04/03/use-delegated-administration-and-proxy-functions.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 2014-08-29
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      相关资源
      最近更新 更多