RDP saioen kudeaketa eskuordetzea

RDP saioen kudeaketa eskuordetzea
Lan egiten dudan erakundean, urrutiko lana debekatuta dago printzipioz. zen. Joan den astera arte. Orain premiazko irtenbide bat ezarri behar genuen. Negoziotik - prozesuak lan-formatu berri batera egokitzea, gugandik - PKI PIN kode eta tokenekin, VPN, erregistro zehatza eta askoz gehiago.
Besteak beste, Remote Desktop Infrastructure aka Terminal Services konfiguratzen ari nintzen. Hainbat RDS inplementazio ditugu datu-zentro ezberdinetan. Helburuetako bat izan zen erlazionatutako IT sailetako lankideei erabiltzaileen saioetara modu interaktiboan konektatzeko aukera ematea. Dakizuenez, RDS Shadow mekanismo estandar bat dago horretarako, eta delegatzeko modurik errazena RDS zerbitzarietan tokiko administratzaile eskubideak ematea da.
Nire lankideak errespetatzen eta baloratzen ditut, baina oso jatorra naiz administratzaile eskubideak banatzeko orduan. πŸ™‚ Nirekin ados daudenentzat, mesedez jarraitu ebakia.

Tira, zeregina argi dago, orain ekin gaitezen.

Urratsera 1

Sortu dezagun segurtasun talde bat Active Directory-n RDP_Eragileak eta sartu bertan eskubideak eskuordetu nahi dizkiegun erabiltzaileen kontuak:

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

AD gune anitz badituzu, domeinu-kontrolatzaile guztietan errepikatu arte itxaron beharko duzu hurrengo urratsera pasa aurretik. Normalean ez da 15 minutu baino gehiago behar.

Urratsera 2

Eman diezaiegun talde-eskubideak RDSH zerbitzari bakoitzean terminal saioak kudeatzeko:

Set-RDSPermissions.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")
        }
    }
}

Urratsera 3

Gehitu taldea tokiko taldera Urruneko mahaigaineko erabiltzaileak RDSH zerbitzari bakoitzean. Zure zerbitzariak saio-bildumetan konbinatzen badira, hau bilduma mailan egiten dugu:

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

Erabiltzen ditugun zerbitzari bakarrerako taldearen politika, zerbitzarietan aplikatzeko zain. Itxaroteko alferrak direnek prozesua bizkor dezakete gpupdate zahar ona erabiliz, hobe erdialdean.

Urratsera 4

Presta dezagun PS script hau "kudeatzaileentzat":

RDSMmanagement.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 script-a exekutatzeko erosoa izan dadin, shell bat sortuko dugu PS script-aren izen bereko cmd fitxategi baten moduan:

RDSManagement.cmd

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

Bi fitxategiak "kudeatzaileak" eskuragarri egongo diren karpeta batean jartzen ditugu eta berriro saioa hasteko eskatuko diegu. Orain, cmd fitxategia exekutatuta, RDS Shadow moduan beste erabiltzaile batzuen saioetara konektatu eta saioa amaitzera behartu ahal izango dira (erabilgarria izan daiteke erabiltzaileak "zintzilik" saio bat modu independentean amaitu ezin duenean).

Honela dirudi:

"kudeatzailea"rentzatRDP saioen kudeaketa eskuordetzea

ErabiltzailearentzatRDP saioen kudeaketa eskuordetzea

Azken iruzkin batzuk

Γ‘abardura 1. Kontrola lortzen saiatzen ari garen erabiltzaile-saioa Set-RDSPermissions.ps1 script-a zerbitzarian exekutatu aurretik abiarazi bada, orduan "kudeatzaileak" sarbide-errore bat jasoko du. Hemen irtenbidea begi-bistakoa da: kudeatutako erabiltzailea saioa hasi arte itxaron.

Γ‘abardura 2. RDP Shadow-ekin hainbat egunetan lanean aritu ondoren, akats edo funtzio interesgarri bat nabaritu dugu: itzal saioa amaitu ondoren, erretiluko hizkuntza-barra desagertzen da konektatzen ari den erabiltzailearentzat, eta hura berreskuratzeko, erabiltzaileak berriro egin behar du. -saioa hasi. Ikusten denez, ez gaude bakarrik: denbora, Π΄Π²Π°, hiru.

Hori da dena. Zu eta zure zerbitzariei osasun ona opa diet. Beti bezala, zure iritzia espero dut iruzkinetan eta beheko inkesta laburra egiteko eskatzen dizut.

iturri

Erregistratutako erabiltzaileek soilik parte hartu dezakete inkestan. Hasi saioa, mesedez.

Zer erabiltzen duzu?

  • 8,1%AMMYY Admin5

  • 17,7%AnyDesk11

  • 9,7%DameWare6

  • 24,2%Radmin15

  • 14,5%RDS itzala9

  • 1,6%Laguntza azkarra / Windows Urruneko Laguntza1

  • 38,7%TeamViewer24

  • 32,3%VNC20

  • 32,3%beste20

  • 3,2%Lite Manager2

62 erabiltzailek eman dute botoa. 22 erabiltzaile abstenitu ziren.

Iturria: www.habr.com

Gehitu iruzkin berria