RDP ಅವಧಿಗಳ ನಿರ್ವಹಣೆಯನ್ನು ನಿಯೋಜಿಸುವುದು

RDP ಅವಧಿಗಳ ನಿರ್ವಹಣೆಯನ್ನು ನಿಯೋಜಿಸುವುದು
ನಾನು ಕೆಲಸ ಮಾಡುವ ಸಂಸ್ಥೆಯಲ್ಲಿ, ದೂರಸ್ಥ ಕೆಲಸವನ್ನು ತಾತ್ವಿಕವಾಗಿ ನಿಷೇಧಿಸಲಾಗಿದೆ. ಆಗಿತ್ತು. ಕಳೆದ ವಾರದವರೆಗೆ. ಈಗ ನಾವು ತುರ್ತಾಗಿ ಪರಿಹಾರವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕಾಗಿತ್ತು. ವ್ಯವಹಾರದಿಂದ - ಹೊಸ ಕೆಲಸದ ಸ್ವರೂಪಕ್ಕೆ ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುವುದು, ನಮ್ಮಿಂದ - PIN ಕೋಡ್‌ಗಳು ಮತ್ತು ಟೋಕನ್‌ಗಳೊಂದಿಗೆ PKI, 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 ಸರ್ವರ್‌ಗಳಲ್ಲಿ ಟರ್ಮಿನಲ್ ಸೆಷನ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಗುಂಪಿನ ಹಕ್ಕುಗಳನ್ನು ನೀಡೋಣ:

ಸೆಟ್-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-RDSPermissions.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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ