我有server A
和server B
在同一个域中(Windows Server 2012 R2):
PS C:\Deployment> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1
我在服务器 B 上有一个名为 的管理员用户WORKGROUP\test
。
我在两台服务器上执行了以下操作:
enable-psremoting -force
我server A
表演了:
Invoke-Command -ComputerName RemoteServerName -ScriptBlock {
get-childitem
get-service
}
这有效。现在我正在使用凭证:
Invoke-Command -ComputerName COMPUTER3 -Credential you-user -ScriptBlock { get-service }
当我运行它时,我看到了这个视图(图片来自互联网):
当我提供正确的凭据时,它可以工作,当我提供错误的凭据时,它就不起作用。所以这没问题。但是当我单击“取消”时,它也可以工作。似乎远程服务器 ( server B
) 不需要凭据。我必须进行哪些更改才能让它在您不提供凭据时也失败?
答案1
在您的Invoke-Command
命令中,您可以使用选项-credential
从微软:
PS C:\> Invoke-Command -ComputerName server01 -Credential domain01\user01 -ScriptBlock {Get-Culture}
答案2
如果允许当前用户访问远程计算机上的 PowerShell 端点,他们将始终能够进行远程访问而无需提供明确的凭据。
要求提供明确凭证的唯一方法是打破这一链条。以下是一些选择:
- 在远程主机上创建一个具有管理员权限的新用户,并将远程用户从允许连接的组成员身份中删除。这在某种程度上等同于该
sudo
方法。 - 重新配置默认的 PowerShell 端点(或删除并创建一个新的端点)以更改允许连接的权限。默认情况下,Microsoft.PowerShell 端点如下所示:
Get-PSSessionConfiguration
名称:microsoft.powershell
PSVersion:5.1
StartupScript:
RunAsUser:
权限:NT AUTHORITY\INTERACTIVE AccessAllowed、BUILTIN\Administrators AccessAllowed、BUILTIN\Remote Management Users AccessAllowed
只要远程用户不属于这些组之一 - 或者您删除这些组并使用新组 - 他们就必须提供显式凭据才能连接。这可能是-Credential
直接在 上使用Invoke-Command
,或者在创建会话时使用。
如果你考虑这个选择,可以考虑深入研究一下恰到好处的管理 ( JEA
)您可以在其中指定三个主要选项:
- 谁可以连接
- 他们能做什么
- 他们的指挥将以谁的身份运行。
JEA 可以成为限制管理员在特定情况下可以做什么的坚实基础的开始。这可以成为基于角色的访问控制(RBAC
)。