允许用户通过远程桌面连接更改过期密码

允许用户通过远程桌面连接更改过期密码

信息:

  • 我遇到过这种情况:我被迫使用不属于域且没有 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

  1. 要启用密码更改选项,请在配置了 RD Web 访问角色的服务器上打开IIS 管理器控制台,转到 [服务器名称] –> 站点 –> 默认网站 –> RDWeb –> 页面并打开应用程序设置部分

    在此处输入图片描述

  2. 在右侧窗格中,找到密码更改已启用参数并将其值更改为真的

    在此处输入图片描述

  3. 您可以访问以下网页测试密码更改机制:

    https://RDS服务器名称/RDWeb/Pages/en-US/password.aspx

    在此处输入图片描述

  4. 现在,当尝试使用过期的密码连接到 RD Web 访问服务器时,用户将被重定向到 password.aspx 网页并提供更改密码的建议。

    在此处输入图片描述

    提示. 安装特殊补丁后,Windows Server 2008 R2 的相同功能即可使用 —KB2648402


2. 启用提示,通知用户密码即将过期

  1. 在RDSH服务器上运行gpedit.msc打开本地组策略
  2. 导航至Computer Configuration\Windows Settings\Local Policies\Security Options
  3. 编辑设置交互式登录:提示用户在密码到期前更改密码并指定合理的天数,例如 14。
  4. 用户(包括通过远程桌面登录的用户)将在密码过期之前收到通知。

答案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。

相关内容