Organisasi tempat kuring damel ngalarang padamelan jarak jauh dina prinsipna. Nepi ka minggu kamari. Ayeuna urang kedah urgently nerapkeun solusi. Usahana kedah adaptasi prosés kana format kerja énggal, sareng urang kedah nerapkeun PKI kalayan kode PIN sareng token, VPN, logging rinci, sareng seueur deui.
Diantara hal séjén, kuring aub dina nyetel infrastruktur desktop jauh (alias Terminal Services). Kami ngagaduhan sababaraha panyebaran RDS di pusat data anu béda. Salah sahiji tugasna nya éta ngaktifkeun kolega ti departemén IT anu padeukeut pikeun nyambung ka sesi pangguna sacara interaktif. Sakumaha anjeun terang, aya mékanisme RDS Shadow anu diwangun pikeun ieu, sareng cara anu paling gampang pikeun ngawakilan éta nyaéta masihan hak administrator lokal dina server RDS.
Abdi hormat sareng ngahargaan kolega kuring, tapi kuring sarakah pisan nalika masihan hak admin. 🙂 Anu satuju sareng kuring, mangga baca.
Nya, tugasna jelas, ayeuna hayu urang angkat ka bisnis.
lengkah 1
Hayu urang jieun grup kaamanan dina Active Directory RDP_Operator sareng kalebet dina éta akun pangguna anu urang hoyong utusan hak:
$Users = @(
"UserLogin1",
"UserLogin2",
"UserLogin3"
)
$Group = "RDP_Operators"
New-ADGroup -Name $Group -GroupCategory Security -GroupScope DomainLocal
Add-ADGroupMember -Identity $Group -Members $Users
Upami anjeun gaduh sababaraha situs AD, anjeun kedah ngadagoan apdet pikeun ngayakeun réplikasi ka sadaya pangendali domain sateuacan neraskeun kana léngkah salajengna. Ieu ilaharna nyokot teu leuwih ti 15 menit.
lengkah 2
Hayu urang masihan idin ka grup pikeun ngatur sési terminal dina unggal server RDSH:
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")
}
}
}
lengkah 3
Hayu urang tambahkeun grup kana grup lokal Pamaké Desktop Jauh Dina unggal server RDSH. Upami server anjeun dikelompokkeun kana kumpulan sési, laksanakeun ieu dina tingkat koleksi:
$Group = "RDP_Operators"
$CollectionName = "MyRDSCollection"
[String[]]$CurrentCollectionGroups = @(Get-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup).UserGroup
Set-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup ($CurrentCollectionGroups + $Group)
Pikeun server tunggal kami nganggo , ngantosan eta dilarapkeun ka server. Jalma anu teuing kedul ngadagoan bisa maksakeun prosés ngagunakeun gpupdate heubeul alus, preferably .
lengkah 4
Hayu urang nyiapkeun skrip PS di handap pikeun "manajer":
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 " сессий не найдено"
}
}
Sangkan skrip PS gampang dijalankeun, hayu urang jieun cangkangna dina wangun file cmd anu ngaranna sarua jeung aksara PS:
RDSManagement.cmd
@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*
Pasang duanana file dina polder anu tiasa diaksés ku "manajer" sareng naroskeun aranjeunna asup deui. Ayeuna, ku ngajalankeun file cmd, aranjeunna bakal tiasa nyambung ka sesi pangguna sanés dina modeu RDS Shadow sareng maksa kaluar aranjeunna (ieu mangpaat nalika pangguna henteu tiasa ngeureunkeun sési beku).
Sigana mah kieu:
Pikeun "manajer"
Pikeun pamaké
Sababaraha komentar ahir
Nuansa 1Upami sési pangguna anu urang coba pikeun ngawasaan dimimitian sateuacan skrip Set-RDSPermissions.ps1 dijalankeun dina server, pangguna anu "diurus" bakal nampi kasalahan aksés. Solusina écés: antosan dugi pangguna anu diurus kaluar deui.
Nuansa 2Saatos sababaraha dinten damel sareng RDP Shadow, urang perhatikeun bug atanapi fitur anu pikaresepeun: saatos ngeureunkeun sési kalangkang, bar basa pangguna dina baki sistem ngaleungit, sareng pikeun malikkeunana, pangguna kedah asup deui. Tétéla, urang henteu nyalira: , , .
Sakitu wae kanggo ayeuna. Kuring miharep anjeun sarta server anjeun kaséhatan alus. Sakumaha biasa, kuring ngabagéakeun tanggapan anjeun dina koméntar sareng naroskeun anjeun nyandak survey pondok di handap.
sumber
Ngan pamaké nu kadaptar bisa ilubiung dina survey. , Punten.
Anjeun nganggo naon?
8,1%AMMYY Admin5
17,7%AnyDesk11
9,7%DameWare6
24,2%Radmin15
14,5%RDS kalangkang9
1,6%Quick Assist / Windows Remote Assistance1
38,7%TeamViewer24
32,3%VNC20
32,3%lain20
3,2%LiteManager2
62 pamaké milih. 22 pamaké abstained.
sumber: www.habr.com
