RDP அமர்வுகளின் நிர்வாகத்தை ஒப்படைத்தல்

RDP அமர்வுகளின் நிர்வாகத்தை ஒப்படைத்தல்
நான் பணிபுரியும் நிறுவனத்தில், தொலைதூர வேலை கொள்கையளவில் தடைசெய்யப்பட்டுள்ளது. இருந்தது. கடந்த வாரம் வரை. இப்போது நாம் ஒரு தீர்வை அவசரமாக செயல்படுத்த வேண்டியிருந்தது. வணிகத்திலிருந்து - ஒரு புதிய பணி வடிவமைப்பிற்கு செயல்முறைகளை மாற்றியமைத்தல், எங்களிடமிருந்து - PKI உடன் PIN குறியீடுகள் மற்றும் டோக்கன்கள், VPN, விரிவான பதிவு மற்றும் பல.
மற்றவற்றுடன், டெர்மினல் சர்வீசஸ் என்ற தொலைநிலை டெஸ்க்டாப் உள்கட்டமைப்பை நான் அமைத்துக் கொண்டிருந்தேன். வெவ்வேறு தரவு மையங்களில் எங்களிடம் பல RDS வரிசைப்படுத்தல்கள் உள்ளன. தொடர்புடைய தகவல் தொழில்நுட்பத் துறைகளைச் சேர்ந்த சக ஊழியர்களை ஊடாடும் வகையில் பயனர் அமர்வுகளுடன் இணைக்க உதவுவது இலக்குகளில் ஒன்றாகும். உங்களுக்குத் தெரியும், இதற்கு ஒரு நிலையான RDS நிழல் பொறிமுறை உள்ளது, மேலும் அதை வழங்குவதற்கான எளிதான வழி RDS சேவையகங்களில் உள்ளூர் நிர்வாகி உரிமைகளை வழங்குவதாகும்.
நான் எனது சக ஊழியர்களை மதிக்கிறேன், மதிக்கிறேன், ஆனால் நிர்வாக உரிமைகளை வழங்குவதில் நான் மிகவும் பேராசைப்படுகிறேன். 🙂 என்னுடன் உடன்படுபவர்கள், தயவு செய்து வெட்டியைப் பின்பற்றவும்.

சரி, பணி தெளிவாக உள்ளது, இப்போது வணிகத்திற்கு வருவோம்.

1 விலக

ஆக்டிவ் டைரக்டரியில் பாதுகாப்புக் குழுவை உருவாக்குவோம் RDP_ஆபரேட்டர்கள் நாங்கள் உரிமைகளை வழங்க விரும்பும் பயனர்களின் கணக்குகளை அதில் சேர்க்கவும்:

$Users = @(
    "UserLogin1",
    "UserLogin2",
    "UserLogin3"
)
$Group = "RDP_Operators"
New-ADGroup -Name $Group -GroupCategory Security -GroupScope DomainLocal
Add-ADGroupMember -Identity $Group -Members $Users

உங்களிடம் பல AD தளங்கள் இருந்தால், அடுத்த கட்டத்திற்குச் செல்வதற்கு முன், எல்லா டொமைன் கன்ட்ரோலர்களுக்கும் அது நகலெடுக்கப்படும் வரை நீங்கள் காத்திருக்க வேண்டும். இதற்கு பொதுவாக 15 நிமிடங்களுக்கு மேல் ஆகாது.

2 விலக

ஒவ்வொரு RDSH சேவையகங்களிலும் டெர்மினல் அமர்வுகளை நிர்வகிக்க குழு உரிமைகளை வழங்குவோம்:

Set-RDSPpermissions.ps1

$Group = "RDP_Operators"
$Servers = @(
    "RDSHost01",
    "RDSHost02",
    "RDSHost03"
)
ForEach ($Server in $Servers) {
    #Делегируем право на теневые сессии
    $WMIHandles = Get-WmiObject `
        -Class "Win32_TSPermissionsSetting" `
        -Namespace "rootCIMV2terminalservices" `
        -ComputerName $Server `
        -Authentication PacketPrivacy `
        -Impersonation Impersonate
    ForEach($WMIHandle in $WMIHandles)
    {
        If ($WMIHandle.TerminalName -eq "RDP-Tcp")
        {
        $retVal = $WMIHandle.AddAccount($Group, 2)
        $opstatus = "успешно"
        If ($retVal.ReturnValue -ne 0) {
            $opstatus = "ошибка"
        }
        Write-Host ("Делегирование прав на теневое подключение группе " +
            $Group + " на сервере " + $Server + ": " + $opstatus + "`r`n")
        }
    }
}

3 விலக

குழுவை உள்ளூர் குழுவில் சேர்க்கவும் தொலைநிலை டெஸ்க்டாப் பயனர்கள் RDSH சேவையகங்கள் ஒவ்வொன்றிலும். உங்கள் சேவையகங்கள் அமர்வு சேகரிப்புகளாக இணைக்கப்பட்டிருந்தால், சேகரிப்பு மட்டத்தில் இதைச் செய்வோம்:

$Group = "RDP_Operators"
$CollectionName = "MyRDSCollection"
[String[]]$CurrentCollectionGroups = @(Get-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup).UserGroup
Set-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup ($CurrentCollectionGroups + $Group)

ஒற்றை சேவையகங்களுக்கு நாங்கள் பயன்படுத்துகிறோம் குழு கொள்கை, இது சேவையகங்களில் பயன்படுத்தப்படும் வரை காத்திருக்கிறது. காத்திருக்க மிகவும் சோம்பேறியாக இருப்பவர்கள், நல்ல பழைய gupdate ஐப் பயன்படுத்தி செயல்முறையை விரைவுபடுத்தலாம் மையமாக.

4 விலக

"மேலாளர்களுக்கு" பின்வரும் PS ஸ்கிரிப்டை தயார் செய்வோம்:

RDSManagement.ps1

$Servers = @(
    "RDSHost01",
    "RDSHost02",
    "RDSHost03"
)

function Invoke-RDPSessionLogoff {
    Param(
        [parameter(Mandatory=$True, Position=0)][String]$ComputerName,
        [parameter(Mandatory=$true, Position=1)][String]$SessionID
    )
    $ErrorActionPreference = "Stop"
    logoff $SessionID /server:$ComputerName /v 2>&1
}

function Invoke-RDPShadowSession {
    Param(
        [parameter(Mandatory=$True, Position=0)][String]$ComputerName,
        [parameter(Mandatory=$true, Position=1)][String]$SessionID
    )
    $ErrorActionPreference = "Stop"
    mstsc /shadow:$SessionID /v:$ComputerName /control 2>&1
}

Function Get-LoggedOnUser {
    Param(
        [parameter(Mandatory=$True, Position=0)][String]$ComputerName="localhost"
    )
    $ErrorActionPreference = "Stop"
    Test-Connection $ComputerName -Count 1 | Out-Null
    quser /server:$ComputerName 2>&1 | Select-Object -Skip 1 | ForEach-Object {
        $CurrentLine = $_.Trim() -Replace "s+"," " -Split "s"
        $HashProps = @{
            UserName = $CurrentLine[0]
            ComputerName = $ComputerName
        }
        If ($CurrentLine[2] -eq "Disc") {
            $HashProps.SessionName = $null
            $HashProps.Id = $CurrentLine[1]
            $HashProps.State = $CurrentLine[2]
            $HashProps.IdleTime = $CurrentLine[3]
            $HashProps.LogonTime = $CurrentLine[4..6] -join " "
            $HashProps.LogonTime = $CurrentLine[4..($CurrentLine.GetUpperBound(0))] -join " "
        }
        else {
            $HashProps.SessionName = $CurrentLine[1]
            $HashProps.Id = $CurrentLine[2]
            $HashProps.State = $CurrentLine[3]
            $HashProps.IdleTime = $CurrentLine[4]
            $HashProps.LogonTime = $CurrentLine[5..($CurrentLine.GetUpperBound(0))] -join " "
        }
        New-Object -TypeName PSCustomObject -Property $HashProps |
        Select-Object -Property UserName, ComputerName, SessionName, Id, State, IdleTime, LogonTime
    }
}

$UserLogin = Read-Host -Prompt "Введите логин пользователя"
Write-Host "Поиск RDP-сессий пользователя на серверах..."
$SessionList = @()
ForEach ($Server in $Servers) {
    $TargetSession = $null
    Write-Host "  Опрос сервера $Server"
    Try {
        $TargetSession = Get-LoggedOnUser -ComputerName $Server | Where-Object {$_.UserName -eq $UserLogin}
    }
    Catch {
        Write-Host "Ошибка: " $Error[0].Exception.Message -ForegroundColor Red
        Continue
    }
    If ($TargetSession) {
        Write-Host "    Найдена сессия с ID $($TargetSession.ID) на сервере $Server" -ForegroundColor Yellow
        Write-Host "    Что будем делать?"
        Write-Host "      1 - подключиться к сессии"
        Write-Host "      2 - завершить сессию"
        Write-Host "      0 - ничего"
        $Action = Read-Host -Prompt "Введите действие"
        If ($Action -eq "1") {
            Invoke-RDPShadowSession -ComputerName $Server -SessionID $TargetSession.ID
        }
        ElseIf ($Action -eq "2") {
            Invoke-RDPSessionLogoff -ComputerName $Server -SessionID $TargetSession.ID
        }
        Break
    }
    Else {
        Write-Host "    сессий не найдено"
    }
}

PS ஸ்கிரிப்டை இயக்க வசதியாக மாற்ற, PS ஸ்கிரிப்ட்டின் அதே பெயரில் ஒரு cmd கோப்பின் வடிவத்தில் ஒரு ஷெல்லை உருவாக்குவோம்:

RDSManagement.cmd

@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*

இரண்டு கோப்புகளையும் "மேலாளர்கள்" அணுகக்கூடிய ஒரு கோப்புறையில் வைத்து, அவர்களை மீண்டும் உள்நுழையச் சொல்கிறோம். இப்போது, ​​cmd கோப்பை இயக்குவதன் மூலம், அவர்கள் RDS நிழல் பயன்முறையில் உள்ள பிற பயனர்களின் அமர்வுகளுடன் இணைக்க முடியும் மற்றும் அவர்களை வெளியேறும்படி கட்டாயப்படுத்த முடியும் (பயனர் சுயாதீனமாக "தொங்கும்" அமர்வை நிறுத்த முடியாதபோது இது பயனுள்ளதாக இருக்கும்).

இது இப்படி தெரிகிறது:

"மேனேஜருக்கு"RDP அமர்வுகளின் நிர்வாகத்தை ஒப்படைத்தல்

பயனருக்குRDP அமர்வுகளின் நிர்வாகத்தை ஒப்படைத்தல்

சில இறுதி கருத்துக்கள்

நுணுக்கம் 1. Set-RDSPpermissions.ps1 ஸ்கிரிப்ட் சேவையகத்தில் செயல்படுத்தப்படுவதற்கு முன்பு, நாங்கள் கட்டுப்பாட்டைப் பெற முயற்சிக்கும் பயனர் அமர்வு தொடங்கப்பட்டிருந்தால், “மேலாளர்” அணுகல் பிழையைப் பெறுவார். இங்கே தீர்வு வெளிப்படையானது: நிர்வகிக்கப்பட்ட பயனர் உள்நுழையும் வரை காத்திருக்கவும்.

நுணுக்கம் 2. RDP நிழலுடன் பல நாட்கள் பணிபுரிந்த பிறகு, ஒரு சுவாரஸ்யமான பிழை அல்லது அம்சத்தை நாங்கள் கவனித்தோம்: நிழல் அமர்வின் முடிவில், பயனருடன் இணைக்கப்பட்டுள்ள தட்டில் உள்ள மொழிப் பட்டி மறைந்துவிடும், அதைத் திரும்பப் பெற, பயனர் மீண்டும் செய்ய வேண்டும். -உள்நுழைய. அது மாறிவிடும், நாங்கள் தனியாக இல்லை: நேரம், два, மூன்று.

அவ்வளவுதான். நீங்களும் உங்கள் சர்வர்களும் நல்ல ஆரோக்கியத்தை விரும்புகிறேன். எப்போதும் போல், கருத்துகளில் உங்கள் கருத்தை எதிர்பார்க்கிறேன், மேலும் கீழே உள்ள குறுகிய கருத்துக்கணிப்பில் ஈடுபடுமாறு கேட்டுக்கொள்கிறேன்.

ஆதாரங்கள்

பதிவு செய்த பயனர்கள் மட்டுமே கணக்கெடுப்பில் பங்கேற்க முடியும். உள்நுழையவும், தயவு செய்து.

நீங்கள் எதைப் பயன்படுத்துகிறீர்கள்?

  • 8,1%AMMYY நிர்வாகம்5

  • 17,7%AnyDesk11

  • 9,7%டேம்வேர்6

  • 24,2%ராட்மின்15

  • 14,5%RDS நிழல்9

  • 1,6%விரைவு உதவி / விண்டோஸ் ரிமோட் உதவி1

  • 38,7%TeamViewer24

  • 32,3%VNC20

  • 32,3%மற்ற20

  • 3,2%லைட்மேனேஜர்2

62 பயனர்கள் வாக்களித்தனர். 22 பயனர்கள் வாக்களிக்கவில்லை.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்