最近因為一個監控相關的項目,深入研究了一下 windows 的 遠程桌面的相關知識。 1. 如何讓關閉了遠程桌面連接的用戶,對應的 session 立即退出 windows server。 大家使用 mstsc.exe 遠程桌面登錄windows server時,退出時,99.99%的人會直接關閉 ...
最近因為一個監控相關的項目,深入研究了一下 windows 的 遠程桌面的相關知識。
1. 如何讓關閉了遠程桌面連接的用戶,對應的 session 立即退出 windows server。
大家使用 mstsc.exe 遠程桌面登錄windows server時,退出時,99.99%的人會直接關閉 mstsc.exe 視窗,而不會點擊開始--->退出。導致的問題是,登錄用戶已經提出了,但是 query user 和 query session 時,發現退出的用戶,在 windows server 中還是 Active/運行中 則狀態。這樣會白白占用一個sesion的資源,可能會導致,別人登錄時,報 類似 “超過人數” 的錯誤。
解決辦法:
註冊表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp],修改
MaxDisconnectionTime
將該值改為0x3e8(1000),也就是1000毫秒(也就是1秒),重啟系統就ok。
Next look to the following key in the registry:
HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\Console
&
HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
Look for fInheritresetBroken (make dword 0) 不繼承客戶端的設置
fInheritReconnectSame (make dword 0) 不繼承客戶端的設置--連接到以前的同一個session
fReconnectSame (make dword 0) 是否連接到以前的同一個session
fResetBroken (make dword 1) 是否斷開連接之後,進行連接的重置,也即使 不使用以前的session,重新初始化一個新的session
If all those values are OK then we'll look at the MaxDisconnectionTime values under the Terminal Server Key. You'll need to expand each subskey and look for these two entries in EVERY key, it exists multiple times
fInheritMaxDisconnectionTime (make this dword 0 to disable Inherit) -- 不繼承客戶端的設置
&
MaxDisconnectionTime (1000毫秒,也就是在 rdp 連接 埠 1秒 之後,立即將 rdp session 從 windows server中踢掉。)
2. 限制一個用戶僅僅能夠同時連接一次
監控時,我們要實現,一個用戶名,只能同時登錄一次,也就是同一個用戶名,在windows server中,只能有一個登錄會話存在,解決辦法:
設置註冊表:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\fSingleSessionPerUser 為 1. 啟用一個用戶只能有一個session的限制。
fSingleSessionPerUser: TRUE indicates each user can have only a single session; FALSE otherwise.
3. 限制/放開限制 rdp 連接的總數
預設時,有些版本的系統,最多僅僅只能運行兩個 administor 和 一個 console 登錄session的存在。
去掉該限制的方法:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\MaxInstanceCount
設置為 ffffffff。對 rdp session 的併發數量不進行限制。
MaxInstanceCount
Updated: March 28, 2003
Applies To: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1, Windows Server 2003 with SP2
HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services
Description
Stores configuration data for the policy setting Limit number of connections. (限制 rdp 連接的數量)
Change Method
To change the value of this entry, use the Group Policy Object Editor (Gpedit.msc). The corresponding policy is located in Administrative Templates\Windows Components\Terminal Services.
https://technet.microsoft.com/en-us/library/cc758332(v=ws.10).aspx
相關參考資料:
1)http://remotedesktoprdp.com/force-single-session-allow-multiple-sessions-per-user
Force a single session or allow multiple Remote Desktop sessions per user
Remote Desktop/Terminal Services has two settings for multiple sessions. You can either allow multiple sessions per user (in which case if you log in twice, you'll get two sessions), or force a single session per user (in which case you can only log in once and subsequent sessions will be redirectedto the original session.
To change this setting, you'll need to perform a registry change. The following steps describe the process:
- Start Registry Editor (by default, this is located at
c:\windows\regedit.exe
). -
Go to the following registry key:
HKEY_LOCAL_MACHINE\
System\CurrentControlSet\Control\TerminalServer - If the fSingleSessionPerUser value doesn't exist, create a new DWORD value named fSingleSessionPerUser
- Open the fSingleSessionPerUser value. The possible values for this setting are as follows:
- 0x0
- Allow multiple sessions per user
- 0x1
- Force each user to a single session
- Enter the new setting, and then click OK.
2)
https://msdn.microsoft.com/en-us/library/cc248610.aspxFor a specific terminal server session, USERCONFIG indicates the user and session configuration.
-
typedef struct _USERCONFIG { ULONG fInheritAutoLogon :1; ULONG fInheritResetBroken :1; ULONG fInheritReconnectSame :1; ULONG fInheritInitialProgram :1; ULONG fInheritCallback :1; ULONG fInheritCallbackNumber :1; ULONG fInheritShadow :1; ULONG fInheritMaxSessionTime :1; ULONG fInheritMaxDisconnectionTime :1; ULONG fInheritMaxIdleTime :1; ULONG fInheritAutoClient :1; ULONG fInheritSecurity :1; ULONG fPromptForPassword :1; ULONG fResetBroken :1; ULONG fReconnectSame :1; ULONG fLogonDisabled :1; ULONG fWallPaperDisabled :1; ULONG fAutoClientDrives :1; ULONG fAutoClientLpts :1; ULONG fForceClientLptDef :1; ULONG fRequireEncryption :1; ULONG fDisableEncryption :1; ULONG fUnused1 :1; ULONG fHomeDirectoryMapRoot :1; ULONG fUseDefaultGina :1; ULONG fCursorBlinkDisabled :1; ULONG fPublishedApp :1; ULONG fHideTitleBar :1; ULONG fMaximize :1; ULONG fDisableCpm :1; ULONG fDisableCdm :1; ULONG fDisableCcm :1; ULONG fDisableLPT :1; ULONG fDisableClip :1; ULONG fDisableExe :1; ULONG fDisableCam :1; ULONG fDisableAutoReconnect :1; ULONG ColorDepth :3; ULONG fInheritColorDepth :1; ULONG fErrorInvalidProfile :1; ULONG fPasswordIsScPin :1; ULONG fDisablePNPRedir :1; WCHAR UserName[USERNAME_LENGTH + 1]; WCHAR Domain[DOMAIN_LENGTH + 1]; WCHAR Password[PASSWORD_LENGTH + 1]; WCHAR WorkDirectory[DIRECTORY_LENGTH + 1]; WCHAR InitialProgram[INITIALPROGRAM_LENGTH + 1]; WCHAR CallbackNumber[CALLBACK_LENGTH + 1]; CALLBACKCLASS Callback; SHADOWCLASS Shadow; ULONG MaxConnectionTime; ULONG MaxDisconnectionTime; ULONG MaxIdleTime; ULONG KeyboardLayout; BYTE MinEncryptionLevel; WCHAR NWLogonServer[NASIFILESERVER_LENGTH + 1]; APPLICATIONNAME PublishedName; WCHAR WFProfilePath[DIRECTORY_LENGTH + 1]; WCHAR WFHomeDir[DIRECTORY_LENGTH + 1]; WCHAR WFHomeDirDrive[4]; } USERCONFIG, *PUSERCONFIG;
fInheritAutoLogon: The prompt for the password setting. TRUE indicates the use of client-specified autologon settings, FALSE specifies the use of machine autologon settings.
fInheritResetBroken: Reset the session when the connection is broken. TRUE indicates the value to use for fResetBroken from the user properties if the machine/user policy is not set, FALSE otherwise.
fInheritReconnectSame: Reconnect from the same client setting. TRUE indicates the value to use for fReconnectSame from the user properties if the machine/user policy is not set, FALSE otherwise.
fInheritInitialProgram: The initial program setting. TRUE indicates the value to use for InitialProgram from the user properties if the machine/user policy is not set, FALSE otherwise.
fInheritCallback: The callback setting. TRUE indicates the value to use for Callback from the user properties if the machine/user policy is not set, FALSE otherwise.<63>
fInheritCallbackNumber: The callback number setting. TRUE indicates the value to use for CallbackNumber from the user properties if the machine/user policy is not set, FALSE otherwise.<64>
fInheritShadow: The shadow setting. TRUE indicates the value to use for Shadow from the user properties if the machine/user policy is not set, FALSE otherwise.
fInheritMaxSessionTime: The maximum allowed session connection time setting. TRUE indicates the value to use for MaxSessionTime from the user properties if the machine/user policy is not set, FALSE otherwise.
fInheritMaxDisconnectionTime: The maximum allowed session disconnect time setting. TRUE indicates the value to use for MaxDisconnectionTime from the user properties if the machine/user policy is not set, FALSE otherwise.
fInheritMaxIdleTime: The maximum allowed session idle time. TRUE indicates the value to use for MaxIdleTime from the user properties if the machine/user policy is not set, FALSE otherwise.
fInheritAutoClient: The auto client setting. TRUE indicates the value to use for fAutoClientDrivers and fAutoClientLpts from the user properties if the machine/user policy is not set, FALSE otherwise.
fInheritSecurity: Inherit security setting. TRUE indicates the use of security settings from the user properties if the machine/user policy is not set, FALSE otherwise.
fPromptForPassword: Set to TRUE to ignore the credential sent from the client and always prompt for a password, FALSE otherwise.
fResetBroken: Set to TRUE to log off the session when the idle timers for the session expire. Otherwise, the session will be disconnected when the timer expires.
fReconnectSame: FALSE indicates that the user can reconnect from any client computer to a disconnected session.
-
TRUE indicates that the user must reconnect to a disconnected session from the same client computer that initially established the disconnected session. Logging on from a different client computer will lead to a new terminal server session being created.
fLogonDisabled: TRUE indicates that a user cannot log on to a session remotely, FALSE otherwise.<65>
fWallPaperDisabled: TRUE indicates display of the desktop wallpaper in the session has been disabled, FALSE otherwise.
fAutoClientDrives: TRUE specifies to automatically redirect local drives on the client so they are accessible to the user in the remote terminal server session, FALSE otherwise.
fAutoClientLpts: TRUE specifies to automatically redirect printers on the client so they are accessible to the user in the remote terminal server session, FALSE otherwise.
fForceClientLptDef: TRUE indicates to force the client's redirected printer to be the default printer for the user, FALSE otherwise.
fRequireEncryption: TRUE indicates the connection must be encrypted, FALSE otherwise.
fDisableEncryption: TRUE indicates the connection does not need encryption, FALSE otherwise.
fUnused1: Not used.
fHomeDirectoryMapRoot: Not used.
fUseDefaultGina: TRUE indicates to override a third-party GINA so that only the default GINA is used for the terminal server session, FALSE otherwise.<66>
fCursorBlinkDisabled: TRUE indicates disable the blinking of the mouse cursor, FALSE otherwise.<67>
fPublishedApp: Not used.
fHideTitleBar: Not used.
fMaximize: Not used.
fDisableCpm: TRUE indicates disable client printer redirection, FALSE otherwise.
fDisableCdm: TRUE indicates disable client drive redirection, FALSE otherwise.
fDisableCcm: TRUE indicates disable client COM port redirection, FALSE otherwise.
fDisableLPT: TRUE indicates disable client printer (LPT) port redirection, FALSE otherwise.
fDisableClip: TRUE indicates disable client clipboard redirection, FALSE otherwise.
fDisableExe: TRUE indicates disable .exe file execution, FALSE otherwise.
fDisableCam: TRUE indicates disable client audio redirection, FALSE otherwise.
fDisableAutoReconnect: TRUE indicates disable auto-reconnect functionality, FALSE otherwise.<68>
ColorDepth: The color depth of the session.<69>
fInheritColorDepth: Set to TRUE to inherit color depth from the user or client configuration, FALSE otherwise.<70>
fErrorInvalidProfile: Set to TRUE if WFProfilePath, WFHomeDir, or WFHomeDirDrive is invalid (too long), FALSE otherwise.<71>
fPasswordIsScPin: Set to TRUE if the password field contains a smart card PIN.<72>
fDisablePNPRedir: Set to TRUE if Plug and Play (PnP) redirection is disabled, FALSE otherwise.
UserName: The user name used in autologon scenarios.
Domain: The domain name used in autologon scenarios.
Password: The password used in autologon scenarios.
WorkDirectory: The work directory for the initial program.
InitialProgram: The program to run instead of the default.<73>
CallbackNumber: The telephone number that will be returned by the Terminal Services server to the client when the server is unable to complete the connection request from the client. The user on the client side can use this number to call back for technical support.<74>
Callback: The callback class for callback operations.<75>
Shadow: The shadow setting of the session.
MaxConnectionTime: The maximum allowed session connection time setting of the session in milliseconds. The session will disconnect/logoff once the limit is reached.
MaxDisconnectionTime: The maximum allowed session disconnect time of the session in milliseconds(千分之一秒). The session will logoff once the limit is reached.
MaxIdleTime: The maximum allowed session idle time setting of the session in milliseconds. The session will disconnect/logoff once the limit is reached.(10分鐘)
KeyboardLayout: The keyboard layout (HKL) of the session.
MinEncryptionLevel: The minimum allowed encryption level. Possible numeric values for this parameter include 1 (Low), 2 (Client Compatible), 3 (High), and 4 (FIPS). Detailed description of these encryption levels is included in [MS-RDPBCGR] sections 5.3.1 and 5.4.1.
NWLogonServer: The NetWare logon server name.<76>
PublishedName: Not used.
WFProfilePath: The terminal server profile path. Overrides the standard profile path.
WFHomeDir: The terminal server home directory path. Overrides the standard home directory.
WFHomeDirDrive: The terminal server home directory drive. Overrides the standard home directory.
3)https://msdn.microsoft.com/en-us/library/cc248657.aspx
後記:隨便一個 google 相關資料還是很多的,也很權威。沒有了google,或者英語閱讀能力不太好,會產生很大的障礙。