A’ tiomnadh stiùireadh seiseanan RDP

A’ tiomnadh stiùireadh seiseanan RDP
Anns a 'bhuidheann far a bheil mi ag obair, tha obair iomallach air a thoirmeasg ann am prionnsabal. Bha. Gus an t-seachdain sa chaidh. A-nis bha againn ri fuasgladh a chuir an gnìomh gu h-èiginneach. Bho ghnìomhachas - ag atharrachadh phròiseasan gu cruth obrach ùr, bhuainn - PKI le còdan PIN agus comharran, VPN, logadh mionaideach agus mòran a bharrachd.
Am measg rudan eile, bha mi a’ stèidheachadh Bun-structar Deasg Iomallach aka Seirbheisean Terminal. Tha grunn chleachdadh RDS againn ann an diofar ionadan dàta. B’ e aon de na h-amasan leigeil le co-obraichean bho roinnean IT co-cheangailte ceangal ri seiseanan luchd-cleachdaidh gu eadar-ghnìomhach. Mar a tha fios agad, tha uidheamachd àbhaisteach RDS Shadow ann airson seo, agus is e an dòigh as fhasa air a thiomnadh còraichean rianadair ionadail a thoirt seachad air frithealaichean RDS.
Tha mi a’ toirt urram agus luach dha mo cho-obraichean, ach tha mi gu math sanntach nuair a thig e gu bhith a’ toirt seachad chòraichean rianachd. 🙂 Dhaibhsan a tha ag aontachadh rium, feuch an lean thu an gearradh.

Uill, tha an obair soilleir, a-nis leig dhuinn a dhol sìos gu gnìomhachas.

ceum 1

Cruthaichidh sinn buidheann tèarainteachd ann an Active Directory RDP_Oibrichean agus cuir a-steach ann cunntasan an luchd-cleachdaidh sin dha bheil sinn airson còraichean a thiomnadh:

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

Ma tha grunn làraich AD agad, feumaidh tu feitheamh gus am bi e air ath-aithris do gach rianadair fearainn mus gluais thu air adhart chun ath cheum. Mar as trice cha toir seo barrachd air 15 mionaidean.

ceum 2

Bheir sinn còirichean don bhuidheann seiseanan crìochnachaidh a riaghladh air gach aon de na frithealaichean RDSH:

Suidhich-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")
        }
    }
}

ceum 3

Cuir a’ bhuidheann ris a’ bhuidheann ionadail Luchd-cleachdaidh Deasg Iomallach air gach aon de na frithealaichean RDSH. Ma thèid na frithealaichean agad a chur còmhla ann an cruinneachaidhean seisean, nì sinn seo aig ìre cruinneachaidh:

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

Airson frithealaichean singilte bidh sinn a’ cleachdadh poileasaidh buidhne, a’ feitheamh ris a chuir an sàs air na frithealaichean. Faodaidh an fheadhainn a tha ro leisg feitheamh am pròiseas a luathachadh le bhith a’ cleachdadh seann gpupdate math, mas fheàrr sa mheadhan.

ceum 4

Nach ullaich sinn an sgriobt PS a leanas airson “manaidsearan”:

RDSM-stiùiridh.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 "    сессий не найдено"
    }
}

Gus an sgriobt PS a dhèanamh goireasach airson a ruith, cruthaichidh sinn slige air a shon ann an cruth faidhle cmd leis an aon ainm ris an sgriobt PS:

RDSM-riaghlaidh.cmd

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

Cuiridh sinn an dà fhaidhle ann am pasgan a bhios ruigsinneach dha “manaidsearan” agus iarraidh sinn orra ath-logadh a-steach. A-nis, le bhith a’ ruith am faidhle cmd, bidh e comasach dhaibh ceangal a dhèanamh ri seiseanan luchd-cleachdaidh eile ann am modh RDS Shadow agus toirt orra logadh a-mach (faodaidh seo a bhith feumail nuair nach urrainn don neach-cleachdaidh seisean “crochaidh” a thoirt gu crìch gu neo-eisimeileach).

Tha e a’ coimhead rudeigin mar seo:

Airson an "manaidsear"A’ tiomnadh stiùireadh seiseanan RDP

Airson an neach-cleachdaidhA’ tiomnadh stiùireadh seiseanan RDP

Beagan bheachdan deireannach

Nuas 1. Ma chaidh an seisean cleachdaiche ris a bheil sinn a’ feuchainn ri smachd fhaighinn air a chuir air bhog mus deach an sgriobt Set-RDSPermissions.ps1 a chuir gu bàs air an fhrithealaiche, gheibh am “manaidsear” mearachd ruigsinneachd. Tha am fuasgladh an seo follaiseach: fuirich gus an logas an cleachdaiche stiùirichte a-steach.

Nuas 2. Às deidh grunn làithean de bhith ag obair le RDP Shadow, mhothaich sinn bug no feart inntinneach: às deidh deireadh an t-seisein sgàil, bidh am bàr cànain anns an treidhe a’ dol à sealladh airson an neach-cleachdaidh a bhith ceangailte ris, agus airson fhaighinn air ais, feumaidh an neach-cleachdaidh ath-thòiseachadh. -Log a-steach. Mar a thionndaidh e, chan eil sinn nar n-aonar: amannan, два, trì.

Sin e. Tha mi a’ guidhe deagh shlàinte dhut fhèin agus dha do sheirbhisich. Mar as àbhaist, tha mi a’ coimhead air adhart ri do bheachdan air ais anns na beachdan agus ag iarraidh ort an suirbhidh goirid a ghabhail gu h-ìosal.

Stòran

Chan fhaod ach luchd-cleachdaidh clàraichte pàirt a ghabhail san sgrùdadh. Soidhnig a-steach, mas e do thoil e.

Dè a chleachdas tu?

  • 8,1%AmmyY Rianachd 5

  • 17,7%Deasg sam bith 11

  • 9,7%Dameware 6

  • 24,2%Radain 15

  • 14,5%RDS Sgàil 9

  • 1,6%Taic Luath / Taic Iomallach Windows1

  • 38,7%Sgioba sealladair 24

  • 32,3%VNC20

  • 32,3%eile20

  • 3,2%Manaidsear Lite 2

Bhòt 62 neach-cleachdaidh. Sheall 22 neach-cleachdaidh.

Source: www.habr.com

Cuir beachd ann