![允许用户通过远程桌面连接更改过期密码](https://linux22.com/image/1527024/%E5%85%81%E8%AE%B8%E7%94%A8%E6%88%B7%E9%80%9A%E8%BF%87%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E8%BF%9E%E6%8E%A5%E6%9B%B4%E6%94%B9%E8%BF%87%E6%9C%9F%E5%AF%86%E7%A0%81.png)
信息:
我遇到过这种情况:我被迫使用不属于域且没有 AD 的服务器 (Windows 2012 R2)。这不是我的选择,不是最佳选择,而是我无法控制的。
我也有通过 RDP 连接到该服务器的本地用户,并且本地用户有密码过期策略。
由于 AD/Exchange 不属于其中,因此用户不会收到密码即将过期的通知。
问题: 问题是,当用户的密码过期并且他们尝试使用远程桌面连接登录时,系统不允许他们更改密码。
我已经从服务器端取消选中“仅允许运行具有网络级别身份验证的远程桌面的计算机的连接”,因此服务器不需要来自传入 RDP 会话的 NLA。
但是,当使用 Windows 远程桌面连接管理器时,它似乎正在强制使用 NLA。
如果我使用“终端”远程桌面客户端,则客户端上有一个选项,可以禁用“网络级别身份验证”。如果我通过终端客户端禁用 NLA,并连接到服务器,它允许我更改用户的过期密码。
问题: 我假设终端程序只是位于 Windows 远程桌面连接协议之上,如果您可以通过终端程序禁用网络级别身份验证客户端,那么您也可以通过 Windows 内置的远程桌面连接管理器禁用它,但这种假设可能不正确。不幸的是,我在连接管理器 GUI 中没有看到此选项,并且在“.RDP”文件中没有看到任何特定于 NLA 的参数。
如果我点击客户端远程桌面连接管理器上的“关于”,它会告诉我“支持网络级身份验证”。措辞让我相信使用它是可选的,但同样,我看不到在连接管理器中关闭它的方法。顺便说一句,这个特定的连接管理器是 v10。
答案1
你可以用双管齐下的方法来解决这个问题:
1.安装 RD Web 访问角色并启用远程密码更改选项
以下指示来自 woshub.com 文章允许用户在 Windows Server 2012 中通过 RD WebAccess 重置过期密码:
在 Windows 2012 / 2012 R2 中,出现了一个选项,允许远程用户使用 RD Web Access 服务器上的特殊网页更改其密码(当前密码或过期密码)。密码将按以下方式更改:用户以 RD Web Access 角色登录服务器上的注册网页,然后使用特殊表单更改其密码。
远程密码更改选项在具有远程桌面 Web 访问 (RD Web 访问) 角色的服务器上可用,但默认情况下处于禁用状态。要更改密码,需要使用脚本密码.aspx位于C:\Windows\Web\RDWeb\Pages\en-US。
要启用密码更改选项,请在配置了 RD Web 访问角色的服务器上打开IIS 管理器控制台,转到 [服务器名称] –> 站点 –> 默认网站 –> RDWeb –> 页面并打开应用程序设置部分。
在右侧窗格中,找到密码更改已启用参数并将其值更改为真的。
您可以访问以下网页测试密码更改机制:
现在,当尝试使用过期的密码连接到 RD Web 访问服务器时,用户将被重定向到 password.aspx 网页并提供更改密码的建议。
提示. 安装特殊补丁后,Windows Server 2008 R2 的相同功能即可使用 —KB2648402。
2. 启用提示,通知用户密码即将过期
- 在RDSH服务器上运行
gpedit.msc
打开本地组策略 - 导航至
Computer Configuration\Windows Settings\Local Policies\Security Options
- 编辑设置交互式登录:提示用户在密码到期前更改密码并指定合理的天数,例如 14。
- 用户(包括通过远程桌面登录的用户)将在密码过期之前收到通知。
答案2
事实证明,这是通过 .RDP 配置文件中名为“enablecredsspsupport”的未列出的属性进行控制的,通过将其设置为“0”,它会在 RDP 会话中加载登录页面,并允许用户更改其过期的密码。
.RDP 配置文件中所需的确切语法是:
启用凭据支持:i:0
如果您需要进一步参考或阅读,请访问此处: 网络级身份验证和 CredSSP 的暴政
答案3
由于我启用了 NLA,所以这些选项都对我不起作用。以下是通过 PowerShell 更改它的方法 - 详细信息无法登录 RDP 时如何更改自己的过期密码。
function Set-PasswordRemotely {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)][string] $UserName,
[Parameter(Mandatory = $true)][string] $OldPassword,
[Parameter(Mandatory = $true)][string] $NewPassword,
[Parameter(Mandatory = $true)][alias('DC', 'Server', 'ComputerName')][string] $DomainController
)
$DllImport = @'
[DllImport("netapi32.dll", CharSet = CharSet.Unicode)]
public static extern bool NetUserChangePassword(string domain, string username, string oldpassword, string newpassword);
'@
$NetApi32 = Add-Type -MemberDefinition $DllImport -Name 'NetApi32' -Namespace 'Win32' -PassThru
if ($result = $NetApi32::NetUserChangePassword($DomainController, $UserName, $OldPassword, $NewPassword)) {
Write-Output -InputObject 'Password change failed. Please try again.'
} else {
Write-Output -InputObject 'Password change succeeded.'
}
}
只需运行Set-PasswordRemotely
,它就会询问您 4 个问题 - 用户名、旧密码、新密码、域控制器并为您更改密码。它也可以从未加入域的 PC 上运行。需要连接到 DC。