RDP සැසි කළමනාකරණය පැවරීම

RDP සැසි කළමනාකරණය පැවරීම
මම වැඩ කරන සංවිධානයේ, දුරස්ථ වැඩ කිරීම ප්‍රතිපත්තිමය වශයෙන් තහනම්ය. විය. ගිය සතිය වෙනකම්. දැන් අපට හදිසි විසඳුමක් ක්‍රියාත්මක කිරීමට සිදු විය. ව්‍යාපාරයෙන් - නව වැඩ ආකෘතියකට ක්‍රියාවලි අනුවර්තනය කිරීම, අපෙන් - PKI PIN කේත සහ ටෝකන, VPN, සවිස්තරාත්මක ලොග් කිරීම සහ තවත් බොහෝ දේ.
වෙනත් දේ අතර, මම දුරස්ථ ඩෙස්ක්ටොප් යටිතල පහසුකම් හෙවත් ටර්මිනල් සේවා පිහිටුවමින් සිටියෙමි. අපට විවිධ දත්ත මධ්‍යස්ථානවල RDS යෙදවීම් කිහිපයක් තිබේ. එක් ඉලක්කයක් වූයේ අදාළ තොරතුරු තාක්ෂණ දෙපාර්තමේන්තු වල සගයන්ට අන්තර්ක්‍රියාකාරී ලෙස පරිශීලක සැසිවලට සම්බන්ධ වීමට හැකි කිරීමයි. ඔබ දන්නා පරිදි, මේ සඳහා සම්මත RDS Shadow යාන්ත්‍රණයක් ඇති අතර, එය පැවරීමට ඇති පහසුම ක්‍රමය වන්නේ RDS සේවාදායකයන්හි ප්‍රාදේශීය පරිපාලක අයිතිවාසිකම් ලබා දීමයි.
මම මගේ සගයන්ට ගරු කරනවා සහ අගය කරනවා, නමුත් පරිපාලක අයිතිවාසිකම් ලබා දීමේදී මම ඉතා කෑදරයි. 🙂 මා සමඟ එකඟ වන අය සඳහා, කරුණාකර කප්පාදුව අනුගමනය කරන්න.

හොඳයි, කාර්යය පැහැදිලිය, දැන් අපි ව්යාපාරයට යමු.

පියවරක් 1

අපි Active Directory හි ආරක්ෂක කණ්ඩායමක් නිර්මාණය කරමු 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 Shadow මාදිලියේ අනෙකුත් පරිශීලකයින්ගේ සැසිවලට සම්බන්ධ වීමට හැකි වන අතර ඔවුන්ට ඉවත් වීමට බල කරනු ඇත (පරිශීලකයාට "එල්ලෙන" සැසියක් ස්වාධීනව අවසන් කළ නොහැකි විට මෙය ප්‍රයෝජනවත් වේ).

එය මේ වගේ දෙයක් පෙනේ:

"කළමනාකරු" සඳහාRDP සැසි කළමනාකරණය පැවරීම

පරිශීලකයා සඳහාRDP සැසි කළමනාකරණය පැවරීම

අවසාන අදහස් කිහිපයක්

සූක්ෂ්ම 1. අපි පාලනය ලබා ගැනීමට උත්සාහ කරන පරිශීලක සැසිය Set-RDSPpermissions.ps1 ස්ක්‍රිප්ට් සේවාදායකයේ ක්‍රියාත්මක කිරීමට පෙර දියත් කළේ නම්, “කළමනාකරු” හට ප්‍රවේශ දෝෂයක් ලැබෙනු ඇත. මෙහි විසඳුම පැහැදිලිය: කළමනාකරණය කළ පරිශීලකයා ලොග් වන තෙක් රැඳී සිටින්න.

සූක්ෂ්ම 2. RDP Shadow සමඟ වැඩ කිරීමෙන් දින කිහිපයකට පසු, අපි සිත්ගන්නා දෝෂයක් හෝ විශේෂාංගයක් දුටුවෙමු: සෙවනැලි සැසිය අවසන් වූ පසු, පරිශීලකයා සම්බන්ධ කිරීම සඳහා තැටියේ ඇති භාෂා තීරුව අතුරුදහන් වන අතර එය නැවත ලබා ගැනීමට පරිශීලකයා නැවත කළ යුතුය. -ඇතුල් වන්න. පෙනෙන පරිදි, අපි තනිවම නොවේ: වාරයක්, два, තුනකි.

එච්චරයි. ඔබටත් ඔබගේ සේවාදායකයන්ටත් නිවන් සුව ප්‍රාර්ථනා කරමි. සෑම විටම මෙන්, මම අදහස් දැක්වීමේදී ඔබේ ප්‍රතිපෝෂණය බලාපොරොත්තු වන අතර පහත කෙටි සමීක්ෂණයට සහභාගී වන ලෙස ඔබෙන් ඉල්ලා සිටිමි.

මුලාශ්‍ර

සමීක්ෂණයට සහභාගී විය හැක්කේ ලියාපදිංචි පරිශීලකයින්ට පමණි. පුරන්නකරුණාකර.

ඔබ භාවිතා කරන්නේ කුමක්ද?

  • 8,1%AMMYY පරිපාලක5

  • 17,7%AnyDesk11

  • 9,7%DameWare6

  • 24,2%රැඩ්මින්15

  • 14,5%RDS සෙවන 9

  • 1,6%ඉක්මන් සහාය / වින්ඩෝස් දුරස්ථ සහාය1

  • 38,7%TeamViewer24

  • 32,3%VNC20

  • 32,3%වෙනත්20

  • 3,2%LiteManager2

පරිශීලකයින් 62 දෙනෙක් ඡන්දය දුන්හ. පරිශීලකයින් 22 දෙනෙක් ඡන්දය දීමෙන් වැළකී සිටියහ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න