导语:远程桌面协议(RDP, Remote Desktop Protocol)是一个多通道(multi-channel)的协议,让用户(客户端或称“本地电脑”)连上提供微软终端机服务的电脑(服务器端或称“远程电脑”),大部分的Windows都有客户端所需软件。
远程桌面协议(RDP, Remote Desktop Protocol)是一个多通道(multi-channel)的协议,让用户(客户端或称“本地电脑”)连上提供微软终端机服务的电脑(服务器端或称“远程电脑”),大部分的Windows都有客户端所需软件。
对于每次成功连接后,Windows(mstsc.exe)中的RDP客户端都会保存远程计算机名称或IP地址以及用于登录的用户名。这样在下一次开始连接时,RDP客户端就会自动提供用户之前使用的连接过。用户可以从连接列表中选择远程rdp服务器的名称,这样客户端就会自动填写用于登录的用户名。
从用户的角度来看,这确实很方便,但从安全角度来看却是不安全的,特别是当rdp连接发生在公用或不可信的计算机时。
有关远程桌面(终端)会话的信息会被单独存储在每个用户的配置文件中,即用户(假设普通用户而不是管理员)不能查看另一个用户的RDP连接历史。
主要内容分为以下3大块:
1.如何从注册表中删除RDP连接缓存;
2.如何使用脚本清除RDP连接历史记录;
3.如何清除缓存的RDP凭证;
如何从注册表中删除RDP连接缓存
有关所有RDP连接的信息都会被存储在每个用户的注册表中,由于使用内置Windows工具从rdp连接列表中删除一台或多台计算机是不可能的,你将不得不手动删除某些注册表项。
1.运行注册表编辑器regedit.exe,并进入HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client。
2.这时你需要两个注册表项,默认表项(存储最后10个rdp连接的历史记录)和服务器表项(包含先前用于登录的所有rdp服务器和用户名的列表)。
3.将注册表项HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default进行扩展,其中包含最近使用过(Most recently used即MRU)的远程rdp服务器的10个IP地址或DNS名称列表。远程桌面服务器的名称或IP地址保存在MRU *值中。所以要清除最近的rdp连接的历史记录,就要选择名称为MRU0-MRU9的所有值,右键单击并选择删除。
4.接下来,将HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers进行扩展。该扩展包含所有已经建立的RDC(远程桌面客户端)连接的列表。如果使用任何服务器的名称或IP地址展开节点,则UsernameHint(提示用户名)将显示由rdp连接的用户的名称。
5.要清除所有rdp连接和保存的用户名的历史记录,你就必须清除服务器注册表项的内容。由于无法一次选择所有注册表项,因此最简单办法就是删除整个服务器注册表项,然后手动重新创建它。
6.除了指定的注册表项之外,还需要删除Default.rdp中存储的默认rdp连接文件,其中包含有关最新的rdp会话的信息,默认rdp连接文件是位于文档目录中的隐藏文件。
注意:上文所述的清除终端rdp连接历史记录的方法适用于所有版本的Windows XP,Vista,Windows 7,Windows 8和Windows 10以及Windows Server平台,如Windows Server 2003/2008/2012/2016。
如何使用脚本清除RDP连接历史记录
我已经在上文介绍了如何通过注册表手动清除远程桌面历史记录。但是,手动执行,特别是在多台计算机上执行时非常耗时的。因此,我编写了一个小脚本(BAT文件),可以让你轻松的自动清除历史记录。
可以将以下脚本放入开始连接的时候,这样就可以自动执行rdp历史清理,或使用组策略将其部署到计算机中。
@echo off reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /va /f reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /f reg add "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" cd %userprofile%\documents\ attrib Default.rdp -s -h del Default.rdp
注意:在某些情况下,文档文件夹可以从标准目录(c:\users\%username%\ Documents)中移动。例如,由于系统驱动器上缺少空间而文档文件夹存储在另一个分区上。在这种情况下,你必须更改目录的路径或手动查找文件Default.rdp。
以下就是脚本的所有操作,分为7步:
1.禁用向控制台输出信息;
2.删除注册表项HKCU\Software\Microsoft\Terminal Server Client\Default中的所有值,即清除最近的rdp连接列表;
3.从HKCU\Software\Microsoft\Terminal Server Client\Servers中删除整个内容,即清除rdp连接历史记录和保存的用户名;
4.重新创建以前删除的注册表项;
5.使用目录中的Default.rdp文件;
6.更改Default.rdp文件属性,默认情况下它是隐藏的;
7.删除Default.rdp文件;
另外,你可以使用以下PowerShell脚本来清除RDP连接的历史记录。
Get-ChildItem "HKCU:\Software\Microsoft\Terminal Server Client" -Recurse | Remove-ItemProperty -Name UsernameHint -Ea 0 Remove-Item -Path 'HKCU:\Software\Microsoft\Terminal Server Client\servers' -Recurse 2>&1 | Out-Null Remove-ItemProperty -Path 'HKCU:\Software\Microsoft\Terminal Server Client\Default' 'MR*' 2>&1 | Out-Null $docs = [environment]::getfolderpath("mydocuments") + '\Default.rdp' remove-item $docs -Force 2>&1 | Out-Null
注意:RDP历史清理的功能会被内置于许多系统和注册表清理程序中,如CCCleaner等。
清除缓存的RDP凭证
如果在建立新的远程RDP连接时,在输入密码之前,用户通常都会选中“记住我的用户名”的选项,然后用户名和密码都将保存在系统凭证管理器中。等下次连接到同一台计算机时,RDP客户端就会自动使用先前保存的密码,进行远程桌面上授权。
你可以直接从客户端的mstsc.exe窗口中删除此密码,即从连接列表中选择相同的连接,然后单击删除按钮,确认保存的凭证被删除。
或者,你可以直接从Windows Credential Manager中删除保存的密码。然后进入控制面板\用户帐户\凭证管理,选择“管理Windows凭据”,并在保存的密码列表中找到计算机名称,格式为TERMSRV/192.168.1.100,最后展开找到的项并单击删除按钮。
在域环境中,你可以使用“禁止存储网络身份验证的密码和凭证”策略来禁用RDP连接的保存密码。