Narzędzia MSP
Państwa RMM już wykonuje wywołania API. Clavitor zapewnia ich bezpieczeństwo.
Państwa technicy codziennie korzystają z Datto, N-able i ConnectWise. Każdy skrypt, każda automatyzacja, każde zaplanowane zadanie wymaga poświadczeń. Obecnie znajdują się one w zmiennych skryptów, polach niestandardowych lub współdzielonym sejfie, do którego każdy ma dostęp. Proxy Clavitor i CLI zmieniają to, nie zmieniając Państwa przepływów pracy.
Wzorzec proxy dla RMM
Ustaw HTTPS_PROXY w punkcie końcowym, a Państwa istniejące skrypty będą działać bez zmian. Proxy przechwytuje wychodzące żądania HTTPS, rozwiązuje odwołania clavitor:// w nagłówkach i wstrzykuje rzeczywiste poświadczenia. Państwa skrypt nigdy nie widzi sekretu. Państwa konsola RMM nigdy go nie loguje.
# On the managed endpoint — one-time setup
$env:HTTPS_PROXY = "http://localhost:1983"
# Your existing automation scripts work unchanged
# The proxy resolves clavitor:// references in request headers
Invoke-RestMethod -Uri "https://api.openai.com/v1/models" `
-Headers @{ Authorization = "Bearer clavitor://OpenAI/key" }PowerShell
PowerShell to codzienny język MSP. Zarówno CLI, jak i proxy działają natywnie.
CLI — pojedyncze wartości
# Resolve, use, scrub — the credential lives for one statement $cred = clavitor-cli get "Client-Acme/VPN" --field password Add-VpnConnection -Name "Acme" -ServerAddress "vpn.acme.com" -AuthenticationMethod MSChapv2 $secure = ConvertTo-SecureString $cred -AsPlainText -Force Set-VpnConnectionUsernamePassword -ConnectionName "Acme" -Password $secure Remove-Variable cred, secure
Renderowanie — szablony konfiguracji
# Template with clavitor:// references (safe to store in your RMM) clavitor-cli render monitoring-config.json | ` Set-Content -Path "C:\ProgramData\Monitor\config.json"
Proxy — przezroczyste wstrzykiwanie
$env:HTTPS_PROXY = "http://localhost:1983"
# Every Invoke-RestMethod and Invoke-WebRequest now resolves clavitor://
Invoke-RestMethod -Uri "https://api.datto.com/v1/devices" `
-Headers @{ Authorization = "Bearer clavitor://Datto API/key" }Atera
Atera zastępuje symbole zastępcze pól niestandardowych w parametrach skryptów w czasie wykonywania, używając składni {[Atera.<level>.CustomField.<name>]}. Przekaż token Clavitor do jednorazowego skryptu instalacyjnego jako parametr; późniejsze skrypty wywołują CLI w punkcie końcowym.
Instalacja za pomocą profilu automatyzacji IT
W bibliotece skryptów Atera utwórz skrypt PowerShell Zainstaluj Clavitor z jednym parametrem. W profilu automatyzacji IT, który go uruchamia, wywołaj go za pomocą symbolu zastępczego pola na poziomie klienta:
Install-Clavitor.ps1 -Token "{[Atera.Customer.CustomField.ClavitorToken]}"Atera zastępuje wartość przed tym, jak agent odczyta listę argumentów. Skrypt:
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
Rozwiązywanie poświadczeń w czasie wykonywania
Po zarejestrowaniu punktu końcowego, każdy późniejszy skrypt Atera odczytuje poświadczenia z sejfu — Atera przechowuje tylko gniazdo tokenu:
$pass = clavitor-cli get "Client-Acme/SQL Server" --field password
$secure = ConvertTo-SecureString $pass -AsPlainText -Force
Invoke-Sqlcmd -ServerInstance "sql.acme.local" `
-Credential (New-Object PSCredential("sa", $secure)) -Query "SELECT 1"
Remove-Variable pass, secureConnectWise Automate
Automate zastępuje makra Extra Data Field (EDF) w argumentach kroków skryptu za pomocą składni {%^el:FieldName^%} (EDF na poziomie komputera). CLI instaluje się za pomocą skryptu Automate, który pobiera plik binarny i wywołuje krok PowerShell z tokenem przekazanym jako parametr — wartość EDF jest zastępowana przed wykonaniem kroku skryptu.
Skrypt Automate: instalacja
W edytorze skryptów Automate utwórz skrypt z dwoma krokami:
Step 1 File Download from LTShare clavitor-cli.exe → %windir%\Temp\
Step 2 Shell Execute (PowerShell) Install-Clavitor.ps1 -Token "{%^el:ClavitorToken^%}"Makro {%^el:ClavitorToken^%} jest zastępowane wartością EDF na poziomie komputera przed uruchomieniem kroku PowerShell. Zachowaj tokeny poniżej 255 znaków, aby pozostać w limicie podstawienia LabReplace. Sam skrypt:
# Install-Clavitor.ps1 param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
Skrypt Automate: rotacja poświadczeń domeny
Kolejne skrypty odczytują z sejfu i zapisują status z powrotem do EDF w celu tworzenia pulpitów nawigacyjnych:
$cred = clavitor-cli get "Client-Delta/Domain Admin" --field password
$secure = ConvertTo-SecureString $cred -AsPlainText -Force
Reset-ComputerMachinePassword `
-Credential (New-Object PSCredential("administrator", $secure))
# Push timestamp back to EDF "LastRotation" via Automate's ExtraData Set Value step
Write-Output (Get-Date -Format o)
Remove-Variable cred, secureDatto RMM
Datto RMM udostępnia zmienne globalne i lokalizacji składowania dla komponentów PowerShell jako zmienne środowiskowe z prefiksem $env:; pola zdefiniowane przez użytkownika (UDF) są udostępniane jako $env:UDF_1 do $env:UDF_30. Jeden komponent instaluje CLI; wszystko inne odczytuje z sejfu.
Komponent: instalacja i inicjalizacja
Zdefiniuj zmienną lokalizacji ClavitorToken w konsoli Datto — pojawi się ona w komponencie jako $env:ClavitorToken:
# Datto RMM component: bootstrap Clavitor CLI # Site variable "ClavitorToken" → $env:ClavitorToken at runtime $env:ClavitorToken | clavitor-cli init
Komponent: monitor API przez proxy
Kolejne komponenty zapisują odwołania clavitor:// w nagłówkach żądań — proxy rozwiązuje je na hoście. Poświadczenia nigdy nie trafiają do pamięci skryptu ani logów Datto:
# Scheduled monitor — runs every 15 minutes
$env:HTTPS_PROXY = "http://localhost:1983"
$response = Invoke-RestMethod -Uri "https://api.client.com/v1/status" `
-Headers @{ Authorization = "Bearer clavitor://Client-Bravo/Monitoring API" }
# Push a status code back into UDF_5 for the Datto dashboard
New-ItemProperty -Path "HKLM:\SOFTWARE\CentraStage" `
-Name "Custom5" -Value $response.status -Force | Out-NullKaseya VSA
Procedury agenta VSA zastępują makra #variable# w argumentach PowerShell w czasie wykonywania, a następnie wykonują skrypt za pomocą rodziny kroków executePowershell (executePowerShell64BitSystem itp.). Pole niestandardowe w rekordzie agenta przechowuje token Clavitor; procedura przekazuje go do inicjalizacji przez stdin.
Procedura agenta: instalacja
Dodaj pole niestandardowe agenta ClavitorToken (Audit → Edit Profile → Custom Fields), a następnie zbuduj procedurę z dwoma krokami:
Step 1 Get File from VSA Server clavitor-cli.exe → C:\Program Files\Clavitor\
Step 2 Execute PowerShell (64 Sys) "C:\Program Files\Clavitor\clavitor-cli.exe init" \
stdin = "#vAgentConfiguration.ClavitorToken#"Makro #vAgentConfiguration.ClavitorToken# jest zastępowane wartością pola niestandardowego przed wykonaniem polecenia przez VSA — token nie pojawia się w historii procedur VSA.
Procedura agenta: rotacja poświadczeń uprzywilejowanych
Po zainicjalizowaniu, każda późniejsza procedura odczytuje z sejfu:
# Executed via executePowerShell64BitSystem $cred = clavitor-cli get "Client-Hotel/Local Admin" --field password $secure = ConvertTo-SecureString $cred -AsPlainText -Force Set-LocalUser -Name "Administrator" -Password $secure Remove-Variable cred, secure
N-able N-central
Jednostką automatyzacji jest AMP (Automation Manager Policy) — polityka oparta na PowerShell zbudowana w Automation Manager. Niestandardowe Właściwości na poziomie organizacji, klienta lub lokalizacji mogą być przekazywane do obiektu Run PowerShell Script jako Parametry Wejściowe.
AMP: instalacja z Niestandardową Właściwością jako wejściem
Dodaj Niestandardową Właściwość ClavitorToken na poziomie klienta (Administration → Custom Properties). W Automation Manager utwórz AMP, którego obiekt Run PowerShell Script powiąże Parametr Wejściowy Token z tą Niestandardową Właściwością. Skrypt:
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
Wartość Niestandardowej Właściwości przepływa jako $Token. Nigdy nie pojawia się w wyeksportowanym pliku XML AMP ani w dzienniku audytu N-central.
Repozytorium skryptów: pobieranie poświadczeń w czasie wykonywania
W przypadku skryptów ad-hoc wysyłanych przez Repozytorium skryptów (Configuration → Repository → Scripts/Software), punkt końcowy jest już zainicjalizowany — skrypt po prostu wywołuje CLI:
$dbPass = clavitor-cli get "Client-Bcme/SQL Server" --field password
$secure = ConvertTo-SecureString $dbPass -AsPlainText -Force
Invoke-Sqlcmd -ServerInstance "sql.bcme.com" `
-Credential (New-Object PSCredential("sa", $secure)) -Query "SELECT 1"
Remove-Variable dbPass, secureN-able N-sight
N-sight (dawniej SolarWinds RMM) używa tego samego silnika Automation Manager co N-central, plus Script Manager dla skryptów .ps1, AMP, wsadowych i innych typów. Wzorzec odzwierciedla N-central: AMP z Parametrem Wejściowym dla tokenu, a następnie wszystko inne rozwiązuje się w czasie wykonywania.
Script Manager: instalacja za pomocą Zautomatyzowanego Zadania
Prześlij Install-Clavitor.ps1 do Settings → Script Manager z parametrem dla tokenu. Dołącz go jako Zautomatyzowane Zadanie w punkcie końcowym; przekaż token jako argument skryptu z ustawienia na poziomie urządzenia:
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
Zautomatyzowane Zadanie: zaplanowane tworzenie kopii zapasowych z poświadczeniami z sejfu
Po zainicjalizowaniu, zaplanowane zadania pobierają poświadczenia z sejfu. Wszelkie standardowe dane wyjściowe do 255 znaków pojawiają się z powrotem na pulpicie nawigacyjnym N-sight:
$pass = clavitor-cli get "Client-India/SQL Backup" --field password
$secure = ConvertTo-SecureString $pass -AsPlainText -Force
Backup-SqlDatabase -ServerInstance "sql.india.com" -Database "AppDB" `
-Credential (New-Object PSCredential("backup-svc", $secure))
Write-Output "backup OK $(Get-Date -Format o)"
Remove-Variable pass, secureNinjaOne
Skrypty NinjaOne działające w punkcie końcowym mogą odczytywać i zapisywać pola niestandardowe za pomocą wbudowanych poleceń cmdlet: Ninja-Property-Get <name> zwraca wartość, Ninja-Property-Set <name> <value> zapisuje ją z powrotem. Przechowuj token Clavitor w polu niestandardowym organizacji (typ Secure, aby był tylko do zapisu z konsoli); skrypt instalacyjny odczytuje go raz.
Skrypt instalacyjny: odczyt tokenu z pola niestandardowego
W Administration → Library → Custom Fields dodaj pole organizacji clavitorToken typu Secure. Następnie uruchom skrypt instalacyjny:
$token = Ninja-Property-Get clavitorToken $token | clavitor-cli init Remove-Variable token
Akcja niestandardowa: wywołanie API przez proxy
Po zainstalowaniu, automatyzacje wywołują zewnętrzne API przez proxy — poświadczenia nigdy nie są kopiowane do zmiennej skryptu:
$env:HTTPS_PROXY = "http://localhost:1983"
$response = Invoke-RestMethod -Uri "https://api.client-echo.com/v1/status" `
-Headers @{ Authorization = "Bearer clavitor://Client-Echo/Monitoring API" }
# Push the result back to a device custom field for dashboarding
Ninja-Property-Set lastApiStatus $response.statusSyncro
Syncro udostępnia niestandardowe pola zasobów i tagi jako zmienne skryptowe Platform przy użyciu składni podwójnych nawiasów klamrowych {{asset_custom_field_<name>}}. Zdefiniuj zmienną skryptową typu Platform i powiąż ją z polem — Syncro zastępuje wartość w parametrze PowerShell w czasie wykonywania skryptu.
Skrypt Syncro: instalacja
Utwórz niestandardowe pole zasobu clavitor_token. W edytorze skryptów zadeklaruj zmienną Token typu Platform powiązaną z {{asset_custom_field_clavitor_token}}; przekaż ją do parametru PowerShell w treści skryptu:
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
Panel Szybka Pomoc na dole każdego edytora skryptów Syncro zawiera listę wszystkich dostępnych zmiennych platformy dla kontekstu zasobu, klienta i zgłoszenia.
Skrypt Syncro: połączenie VPN z poświadczeniami z sejfu
Po instalacji, skrypty i Zautomatyzowane Naprawy rozwiązują poświadczenia z sejfu i używają ich bezpośrednio:
$pass = clavitor-cli get "Client-Golf/VPN" --field password $secure = ConvertTo-SecureString $pass -AsPlainText -Force Add-VpnConnection -Name "Golf" -ServerAddress "vpn.golf.com" ` -AuthenticationMethod MSChapv2 -Force Set-VpnConnectionUsernamePassword -ConnectionName "Golf" -Password $secure # Write status back to asset for Syncro dashboard Rmm-Alert -Category "vpn-status" -Body "Golf connected $(Get-Date -Format o)" Remove-Variable pass, secure
Dlaczego to jest ważne dla MSP
Każda platforma RMM przechowuje poświadczenia gdzieś — niestandardowe właściwości, zmienne lokalizacji, dodatkowe pola danych, parametry skryptów. Każdy technik z dostępem do konsoli może je zobaczyć. Każde naruszenie bezpieczeństwa konsoli RMM ujawnia poświadczenia każdego klienta.
Clavitor przenosi poświadczenia poza RMM. RMM przechowuje tylko token agenta (jeden na klienta). Token zapewnia ograniczony dostęp do sejfu tego klienta. Naruszenie bezpieczeństwa konsoli RMM ujawnia tokeny, a nie poświadczenia — a każdy token jest białą listą IP dla punktu końcowego, na którym został wdrożony.
Ograniczone dla każdego klienta
Każdy sejf klienta ma swój własny token agenta. Dostęp technika jest kontrolowany przez zakres, a nie przez "kto może zalogować się do konsoli RMM".
Audytowane dla każdego skryptu
Każdy dostęp do poświadczeń jest rejestrowany — który skrypt, który punkt końcowy, które poświadczenia, kiedy. Państwa klienci mogą zobaczyć ścieżkę audytu. Mogą Państwo udowodnić, kto uzyskał dostęp do czego.
Odwołane jednym kliknięciem
Klient odchodzi? Odwołaj jego token agenta. Każdy punkt końcowy natychmiast przestaje rozwiązywać poświadczenia. Brak haseł do rotacji, brak pól niestandardowych do wyczyszczenia na 200 maszynach.
Przestań przechowywać poświadczenia w swoim RMM.
Jeden CLI. Każdy klient. Każde poświadczenie ograniczone, audytowane i możliwe do odwołania.