원격 사용자는 RDP(원격 데스크톱 서비스)를 통해 Windows 10 및 11 컴퓨터에 연결할 수 있습니다. 장치 설정에서 RDP를 활성화하고 원격 데스크톱 클라이언트를 사용하여 컴퓨터에 연결하는 것으로 충분합니다. 그러나 동시 RDP 세션 수에는 제한이 있습니다. 한 명의 원격 사용자만 동시에 작업할 수 있습니다. 두 번째 RDP 세션을 열려고 하면 첫 번째 사용자의 세션 연결을 끊을지 묻는 경고가 나타납니다.
Another user is signed in. If you continue, they’ll be disconnected. Do you want to sign in anyway?
모든 데스크톱 Windows 버전(Win 10 및 11 포함)에는 원격 데스크톱 서비스 사용에 대한 여러 제한 사항이 있습니다.
- RDP를 통해 더 높은 Windows 버전(Professional 및 Enterprise)에만 원격으로 연결할 수 있습니다. Windows Home 및 Single Language 버전에서는 들어오는 원격 데스크톱 연결이 금지됩니다.
- 동시 RDP 연결은 하나만 지원됩니다. 두 번째 RDP 세션을 열려고 하면 활성 연결을 닫으라는 메시지가 표시됩니다.
- 컴퓨터의 콘솔(로컬)에서 작업하는 사용자가 있는 경우 새 원격 RDP 연결을 만들려고 하면 콘솔 세션의 연결이 끊어집니다. 사용자가 로컬에서 로그인을 시도하면 원격 RDP 세션도 강제로 연결 해제됩니다.
실제로 Windows에서 동시 RDP 연결 수는 기술적인 측면이 아니라 라이선스에 의해 제한됩니다. 따라서 이 제한으로 인해 여러 사용자가 사용할 수 있는 워크스테이션을 기반으로 터미널 RDP 서버를 만들 수 없습니다. Microsoft의 논리는 간단합니다. 터미널 서버가 필요한 경우 Windows Server 라이선스, RDS CAL을 구입하고 RDSH(원격 데스크톱 세션 호스트) 역할을 설치 및 구성합니다.
기술적으로 충분한 양의 RAM이 있는 모든 Windows 버전은 수십 명의 원격 사용자의 동시 작업을 지원할 수 있습니다. 평균적으로 한 사용자 세션에 150-200MB의 RAM이 필요합니다(실행 중인 앱 제외). 즉, 동시 RDP 세션의 최대 수는 이론적으로 컴퓨터 리소스에 의해서만 제한됩니다.
Windows 10 및 11에서 동시 RDP 연결을 허용하는 방법에 대한 두 가지 방법인 RDP 래퍼 사용을 고려해 보겠습니다. 도구 또는 termsrv.dll 패치 시스템 파일.
참고 . 이 문서에 설명된 시스템 수정은 Microsoft 라이선스 계약 위반으로 간주되며 수행할 수 있는 모든 책임은 사용자에게 있습니다.
RDP 래퍼:Windows에서 다중 RDP 세션 활성화
RDP 래퍼 라이브러리 OpenSource 프로젝트를 사용하면 termsrv.dll 파일을 교체하지 않고도 Windows 10에서 여러 RDP 세션을 활성화할 수 있습니다. 이 도구는 SCM(서비스 제어 관리자)과 원격 데스크톱 서비스 사이의 계층으로 작동합니다. RDPWrap을 사용하면 여러 동시 RDP 연결을 지원할 뿐만 아니라 Windows Home 에디션에서 RDP 서버를 구축할 수 있습니다. RDP Wrapper는 termsrv.dll 파일을 변경하지 않고, 변경된 매개변수로 termsrv 라이브러리를 로드할 뿐입니다.
따라서 RDPWrap은 termsrv.dll 파일 업데이트의 경우에도 작동합니다. Windows 업데이트를 두려워하지 않아도 됩니다.
중요 . RDP Wrapper를 설치하기 전에 termrv.dll 파일의 원본(패치되지 않은) 버전을 사용하고 있는지 확인하는 것이 중요합니다. 그렇지 않으면 RDP 래퍼가 불안정해지거나 전혀 시작되지 않을 수 있습니다.GitHub 리포지토리 https://github.com/binarymaster/rdpwrap/releases에서 RDP 래퍼를 다운로드할 수 있습니다(사용 가능한 최신 버전의 RDP 래퍼 라이브러리는 v1.6.2임). 이 프로젝트는 2017년 이후로 업데이트되지 않았지만 Windows 10 및 Windows 11의 모든 새 빌드에서 사용할 수 있습니다.
RDPWrap-v1.6.2.zip 아카이브에 일부 파일이 포함되어 있습니다:
- RDPWinst.exe — RDP 래퍼 라이브러리 프로그램 설치/제거
- RDPConf.exe — RDP 래퍼 구성 도구
- RDPCheck.exe —RDP 검사 유틸리티(로컬 RDP 검사기)
- install.bat, uninstall.bat, update.bat — RDP 래퍼를 설치, 제거 및 업데이트하기 위한 배치 파일.
RDPWrap을 설치하려면 install.bat를 실행하세요. 파일을 관리자로. 프로그램이 C:\Program Files\RDP Wrapper에 설치됩니다. 예배 규칙서.
설치가 완료되면 RDPConfig.exe를 실행합니다. . 대부분의 경우 설치 직후 도구에 RDP 래퍼가 실행 중(설치됨, 실행 중, 수신 대기 중)이지만 작동하지 않는 것으로 표시됩니다. 빨간색 경고[지원되지 않음]에 유의하십시오. 이 버전의 Windows 10(ver. 10.0.19041.1320)이 RDPWrapper에서 지원되지 않는다고 보고합니다.
사실 Windows 10의 각 버전에 대해 rdpwrap.ini 구성 파일에 설명이 있어야 합니다. 구성 파일에는 Windows 10 빌드에 대한 설정이 없습니다.
rdpwrap.ini 파일의 현재 버전은 https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini
에서 다운로드할 수 있습니다.이 페이지의 내용을 "C:\Program Files\RDP Wrapper\rdpwrap.ini" 파일에 수동으로 복사합니다. 또는 PowerShell cmdlet Invoke-WebRequest를 사용하여 파일을 다운로드합니다(먼저 원격 데스크톱 서비스를 중지해야 함).
Stop-Service termservice -Force
Invoke-WebRequest https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini -outfile "C:\Program Files\RDP Wrapper\rdpwrap.ini"
컴퓨터를 다시 시작하고 RDPConfig.exe 도구를 실행합니다. 진단에서 모든 항목이 녹색인지 확인합니다. 섹션과 [완전히 지원됨]이라는 캡션이 나타납니다. 아래 스크린샷은 이 새로운 구성의 RDP 래퍼가 Windows 11에서도 잘 작동함을 보여줍니다.
컴퓨터에 여러 RDP 세션을 설정해 보십시오(RDP 클라이언트:mstsc.exe, rdcman 등 사용). 잘 작동했습니다(저장된 RDP 자격 증명을 사용할 수도 있습니다)! 이제 Windows 10에서 두 명 이상의 원격 사용자가 서로 다른 RDP 세션을 동시에 사용할 수 있습니다.
RDPWrap 도구는 모든 Windows 버전에서 지원되므로 모든 Windows 장치에서 자신만의 터미널(RDS) 서버를 구축할 수 있습니다.
또한 RDP 래퍼는 다음을 수행할 수 있습니다.
- 원격 데스크톱 사용
- 로그온 화면에서 사용자 숨기기 옵션 Windows 로그온 화면에서 사용자 목록을 숨길 수 있습니다.
- 사용자당 단일 세션을 비활성화하는 경우 옵션을 선택하면 동일한 사용자 계정에서 여러 동시 RDP 세션이 허용됩니다(레지스트리 매개변수 fSingleSessionPerUser = 0은
HKLM\SYSTEM\ CurrentControlSet\Control\Terminal Server\fSingleSessionPerUser
reg 키 아래에 설정됩니다. ); - RDP 포트 — 원격 데스크톱 포트 번호를 TCP 3389에서 다른 포트로 변경할 수 있습니다.
- 세션 섀도잉 모드 섹션에서 RDP 세션에 대한 원격 제어(섀도우) 연결 모드를 구성할 수 있습니다.
RDP 래퍼가 Windows 10에서 작동하지 않음
경우에 따라 RDP 래퍼 도구가 예상대로 작동하지 않고 여러 RDP 세션을 사용하여 Windows 호스트에 연결할 수 없습니다.
유틸리티의 상태 섹션에 [지원되지 않음]이 표시되면 rdpwrap.ini 파일에 Windows 빌드에 대한 구성이 포함되지 않은 것입니다. 위에서 설명한 대로 rdpwrap.ini 파일을 업데이트합니다.
rdpwrap.ini 파일을 업데이트한 후 RDP 래퍼가 작동하지 않으면 rdpwrap.ini 파일을 열고 Windows 버전에 대한 설명 섹션을 찾아보십시오. rdpwrapper 구성 파일에서 Windows 버전을 지원하는지 어떻게 알 수 있나요?
아래 스크린샷은 내 Windows 10 버전(10.0.19041.1320)에 대해 두 개의 설명 섹션이 있음을 보여줍니다.
[10.0.19041.1320] ….. [10.0.19041.1320-SLInit] …..
Windows 버전의 구성 파일에 섹션이 없으면 Google을 사용하여 Windows 빌드에 대한 rdpwrap.ini 문자열을 검색해 보십시오. 찾은 줄을 파일 끝에 추가합니다.
또한 RDPWrapper에 문제가 있는 경우 https://github.com/stascorp/rdpwrap/issues에서 문제를 열 수 있습니다. 여기에서 실제 rdpwrap.ini 파일도 찾을 수 있습니다.보안 업데이트를 설치하거나 Windows 10 빌드를 업그레이드한 후 RDP Wrapper가 제대로 작동하지 않는 경우 진단 섹션에 "Listener state:Not Listening"이 표시되는지 확인하세요.
rdpwrap.ini 파일을 업데이트한 다음 서비스를 다시 설치해 보십시오.
rdpwinst.exe -u
rdpwinst.exe -i
다른 사용자 계정으로 두 번째 RDP 연결을 설정하려고 하면 다음과 같은 경고가 표시됩니다.
The number of connections to this computer is limited and all connections are in use right now. Try connecting later or contact your system administrator.
이 경우 로컬 그룹 정책 편집기(gpedit.msc)를 사용하여 "연결 수 제한 정책을 활성화할 수 있습니다. " 컴퓨터 구성 -> 관리 템플릿 -> Windows 구성 요소 -> 원격 데스크톱 서비스 -> 원격 데스크톱 세션 호스트 -> 연결 섹션 아래에 있습니다. 값을 999999로 변경합니다.
컴퓨터를 다시 시작하여 GPO를 업데이트하고 설정을 적용하십시오.
여러 RDP 세션을 활성화하도록Termrv.dll 수정
rdpwrapper를 사용하지 않고 Windows 10에서 동시 RDP 사용자 연결 수에 대한 제한을 제거하려면 교체할 수 있습니다. 원본 termsrv.dll 파일. 원격 데스크톱 서비스에서 사용하는 기본 라이브러리 파일입니다. 파일은 C:\Windows\System32에 있습니다. 디렉토리.
msrv.dll 파일을 편집하거나 교체하기 전에 백업 복사본을 만드는 것이 좋습니다. 이렇게 하면 필요한 경우 파일의 원래 버전으로 되돌리는 데 도움이 됩니다. 관리자 권한 명령 프롬프트를 열고 다음 명령을 실행합니다.
copy c:\Windows\System32\termsrv.dll termsrv.dll_backup
그런 다음 파일의 소유권을 가져와야 합니다. 다음 명령을 사용하여 파일 소유자를 TrustedInstaller에서 로컬 관리자 그룹으로 변경하려면:
takeown /F c:\Windows\System32\termsrv.dll /A
SUCCESS: The file (or folder): c:\Windows\System32\termsrv.dll now owned by the administrators group
이제 icacls.exe를 사용하여 termsrv.dll 파일에 대한 모든 권한을 로컬 관리자 그룹에 부여합니다.
icacls c:\Windows\System32\termsrv.dll /grant Administrators:F
processed file: c:\Windows\System32\termsrv.dll Successfully processed 1 files; Failed processing 0 files.
그런 다음 원격 데스크톱 서비스(TermService ) services.msc 사용 콘솔 또는 명령 프롬프트에서:
Net stop TermService
원격 데스크톱 서비스 UserMode Port Redirector 서비스가 함께 중지됩니다.
계속 진행하기 전에 Windows 10의 버전(빌드 번호)을 확인해야 합니다. PowerShell 콘솔을 열고 다음 명령을 실행합니다.
Get-ComputerInfo | select WindowsProductName, WindowsVersion
선택
그런 다음 HEX 편집기(예:Tiny Hexer)를 사용하여 termsrv.dll 파일을 엽니다. Windows 빌드에 따라 아래 표에 따라 문자열을 찾아 바꿔야 합니다.
Windows 빌드 | 문자열 찾기 | 다음으로 대체 |
Windows 11 RTM( 21H2 – 22000.258) | 39 81 3C 06 00 00 0F 84 4F 68 01 00 |
B8 00 01 00 00 89 81 38 06 00 00 90
|
Windows 10 x64 21H2 | 39 81 3C 06 00 00 0F 84 DB 61 01 00 | |
Windows 10 x64 21H1 | 39 81 3C 06 00 00 0F 84 2B 5F 01 00 | |
Windows 10 x64 20H2 | 39 81 3C 06 00 00 0F 84 21 68 01 00 | |
Windows 10 x64 2004 | 39 81 3C 06 00 00 0F 84 D9 51 01 00 | |
Windows 10 x64 1909 | 39 81 3C 06 00 00 0F 84 5D 61 01 00 | |
Windows 10 x64 1903 | 39 81 3C 06 00 00 0F 84 5D 61 01 00 | |
Windows 10 x64 1809 | 39 81 3C 06 00 00 0F 84 3B 2B 01 00
| |
Windows 10 x64 1803 | 8B 99 3C 06 00 00 8B B9 38 06 00 00
| |
Windows 10 x64 1709 | 39 81 3C 06 00 00 0F 84 B1 7D 02 00
|
예를 들어 내 Windows 10 x64 빌드는 21H1(19043.1320)이고 termsrv.dll 파일 버전은 10.0.19041.1320입니다. Tiny Hexer에서 termsrv.dll 파일을 열고 다음 텍스트를 찾습니다.
39 81 3C 06 00 00 0F 84 2B 5F 01 00
다음으로 대체하십시오:
B8 00 01 00 00 89 81 38 06 00 00 90
파일을 저장하고 TermService를 실행합니다.
문제가 발생하여 원격 데스크톱 서비스에 문제가 발생하면 서비스를 중지하고 수정된 termsrv.dll 파일을 원래 버전으로 교체하세요.
copy termsrv.dll_backup c:\Windows\System32\termsrv.dll
PowerShell을 사용하여 Windows에서 Termsrv.dll 패치
HEX 편집기를 사용하여 수동으로 termsrv.dll 파일을 수정하지 않으려면 다음 PowerShell 스크립트를 사용하여 패치를 자동으로 적용할 수 있습니다. 이 스크립트는 Windows PowerShell 버전을 기반으로 하며 최신 PowerShell Core에서는 작동하지 않습니다. 이 스크립트는 보편적이며 Windows 10(1809+) 및 Windows 11의 모든 버전에서 termrv.dll 파일을 패치하는 데 사용할 수 있습니다.
# Stop RDP service, make a backup of the termsrv.dllfile and change the permissions
Stop-Service UmRdpService -Force
Stop-Service TermService -Force
$termsrv_dll_acl = Get-Acl c:\windows\system32\termsrv.dll
Copy-Item c:\windows\system32\termsrv.dll c:\windows\system32\termsrv.dll.copy
takeown /f c:\windows\system32\termsrv.dll
$new_termsrv_dll_owner = (Get-Acl c:\windows\system32\termsrv.dll).owner
cmd /c "icacls c:\windows\system32\termsrv.dll /Grant $($new_termsrv_dll_owner):F /C"
# search for a pattern in termsrv.dll file
$dll_as_bytes = Get-Content c:\windows\system32\termsrv.dll -Raw -Encoding byte
$dll_as_text = $dll_as_bytes.forEach('ToString', 'X2') -join ' '
$patternregex = ([regex]'39 81 3C 06 00 00(\s\S\S){6}')
$patch = 'B8 00 01 00 00 89 81 38 06 00 00 90'
$checkPattern=Select-String -Pattern $patternregex -InputObject $dll_as_text
If ($checkPattern -ne $null) {
$dll_as_text_replaced = $dll_as_text -replace $patternregex, $patch
}
Elseif (Select-String -Pattern $patch -InputObject $dll_as_text) {
Write-Output 'The termsrv.dll file is already patch, exitting'
Exit
}
else {
Write-Output "Pattern not found "
}
# patching termsrv.dll
[byte[]] $dll_as_bytes_replaced = -split $dll_as_text_replaced -replace '^', '0x'
Set-Content c:\windows\system32\termsrv.dll.patched -Encoding Byte -Value $dll_as_bytes_replaced
# comparing two files
fc.exe /b c:\windows\system32\termsrv.dll.patched c:\windows\system32\termsrv.dll
# replacing the original termsrv.dll file
Copy-Item c:\windows\system32\termsrv.dll.patched c:\windows\system32\termsrv.dll -Force
Set-Acl c:\windows\system32\termsrv.dll $termsrv_dll_acl
Start-Service UmRdpService
Start-Service TermService
전체 스크립트 코드는 내 GitHub 리포지토리(https://github.com/maxbakhub/winposh/blob/main/termsrv_rdp_patch.ps1
)에서 사용할 수 있습니다.스크립트를 실행하려면 컴퓨터에 다운로드하십시오. 현재 세션에 대한 PowerShell 실행 정책 설정 변경:
Set-ExecutionPolicy Bypass -Scope Process -Force
그리고 스크립트를 실행하십시오:
C:\users\root\desktop\termsrv_rdp_patch.ps1
Windows 업데이트를 설치한 후 스크립트를 실행하여 termsrv.dll 파일을 즉시 변경할 수 있습니다(각 업데이트 설치 후 HEX 편집기에서 termsrv.dll 파일을 수정할 필요 없음).
termrv.dll 파일을 교체하여 Windows 10 또는 11에서 여러 RDP 세션을 활성화하는 방법의 장점은 바이러스 백신이 응답하지 않는다는 것입니다(많은 바이러스 백신에서 Malware/HackTool/Trojan으로 감지하는 RDPWrap과 달리).
주요 단점은 Windows 10 빌드를 업그레이드할 때마다(또는 월별 누적 업데이트를 설치하는 동안 termsrv.dll 파일 버전을 업데이트할 때) termsrv.dll 파일을 수동으로 편집해야 한다는 것입니다. 또한 RDPWrapper를 사용하는 경우 Windows 업데이트를 설치한 후 rdpwrap.ini 파일도 업데이트해야 합니다.
이 기사에서는 Windows의 데스크톱 버전에서 동시 RDP 사용자 연결 수에 대한 제한을 제거하고 무료 터미널 서버를 실행하는 방법을 살펴보았습니다.