Інструменти MSP
Ваша RMM вже робить виклики API. Clavitor робить їх безпечними.
Ваші технічні спеціалісти щодня використовують Datto, N-able та ConnectWise. Кожен скрипт, кожна автоматизація, кожне заплановане завдання потребує облікових даних. Сьогодні вони зберігаються у змінних скриптів, користувацьких полях або спільному сховищі, яке може прочитати кожен. Проксі та CLI Clavitor змінюють це, не змінюючи ваших робочих процесів.
Шаблон проксі для RMM
Встановіть HTTPS_PROXY на кінцевій точці, і ваші існуючі скрипти працюватимуть без змін. Проксі перехоплює вихідні HTTPS-запити, розпізнає посилання clavitor:// у заголовках та вставляє справжні облікові дані. Ваш скрипт ніколи не бачить секрет. Ваша консоль RMM ніколи не реєструє його.
# 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 — це щоденна мова MSP. CLI та проксі працюють нативно.
CLI — окремі значення
# 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
Рендеринг — шаблони конфігурації
# Template with clavitor:// references (safe to store in your RMM) clavitor-cli render monitoring-config.json | ` Set-Content -Path "C:\ProgramData\Monitor\config.json"
Проксі — прозоре вставлення
$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 замінює плейсхолдери користувацьких полів у параметрах скриптів під час виконання, використовуючи синтаксис {[Atera.<level>.CustomField.<name>]}. Передайте токен Clavitor до одноразового скрипта встановлення як параметр; пізніші скрипти звертатимуться до CLI на кінцевій точці.
Встановлення через профіль автоматизації ІТ
У бібліотеці скриптів Atera створіть скрипт PowerShell Install Clavitor з одним параметром. У профілі автоматизації ІТ, який його запускає, викличте його за допомогою плейсхолдера поля рівня клієнта:
Install-Clavitor.ps1 -Token "{[Atera.Customer.CustomField.ClavitorToken]}"Atera замінює значення перед тим, як агент прочитає його список аргументів. Скрипт:
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
Розпізнавання облікових даних під час виконання
Після реєстрації кінцевої точки кожен наступний скрипт Atera читає облікові дані зі сховища — Atera зберігає лише слот токена:
$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 замінює макроси полів додаткових даних (EDF) у аргументах кроків скрипта за допомогою синтаксису {%^el:FieldName^%} (EDF рівня комп'ютера). CLI встановлюється за допомогою скрипта Automate, який завантажує бінарний файл і викликає крок PowerShell з токеном, переданим як параметр — значення EDF замінюється перед виконанням кроку скрипта.
Скрипт Automate: встановлення
В редакторі скриптів Automate створіть скрипт з двома кроками:
Step 1 File Download from LTShare clavitor-cli.exe → %windir%\Temp\
Step 2 Shell Execute (PowerShell) Install-Clavitor.ps1 -Token "{%^el:ClavitorToken^%}"Макрос {%^el:ClavitorToken^%} замінюється значенням EDF рівня комп'ютера перед виконанням кроку PowerShell. Зберігайте токени довжиною до 255 символів, щоб залишатися в межах ліміту заміни LabReplace. Сам скрипт:
# Install-Clavitor.ps1 param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
Скрипт Automate: ротація облікових даних домену
Наступні скрипти читають зі сховища та записують статус назад до EDF для створення дашбордів:
$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 надає змінні сайту та глобальні змінні компонентам PowerShell як змінні середовища з префіксом $env:; користувацькі поля (UDF) надаються як $env:UDF_1 до $env:UDF_30. Один компонент встановлює CLI; все інше читає зі сховища.
Компонент: встановлення та ініціалізація
Визначте змінну сайту ClavitorToken у консолі Datto — вона з'явиться в компоненті як $env:ClavitorToken:
# Datto RMM component: bootstrap Clavitor CLI # Site variable "ClavitorToken" → $env:ClavitorToken at runtime $env:ClavitorToken | clavitor-cli init
Компонент: монітор API через проксі
Наступні компоненти записують посилання clavitor:// у заголовки запитів — проксі розпізнає їх на хості. Облікові дані ніколи не потрапляють у пам'ять скрипта або журнали 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
Процедури агента VSA замінюють макроси #variable# у аргументах PowerShell під час виконання, а потім виконують скрипт через сімейство кроків executePowershell (executePowerShell64BitSystem тощо). Користувацьке поле в записі агента містить токен Clavitor; процедура передає його для ініціалізації через stdin.
Процедура агента: встановлення
Додайте користувацьке поле агента ClavitorToken (Audit → Edit Profile → Custom Fields), а потім створіть процедуру з двома кроками:
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#"Макрос #vAgentConfiguration.ClavitorToken# замінюється значенням користувацького поля перед виконанням команди VSA — токен не з'являється в історії процедур VSA.
Процедура агента: ротація привілейованих облікових даних
Після ініціалізації будь-яка наступна процедура читає зі сховища:
# 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
Одиницею автоматизації є AMP (Automation Manager Policy) — політика на основі PowerShell, створена в Automation Manager. Користувацькі властивості на рівні організації, клієнта або сайту можуть бути передані об'єкту Run PowerShell Script як вхідні параметри.
AMP: встановлення з користувацькою властивістю як вхідними даними
Додайте користувацьку властивість ClavitorToken на рівні клієнта (Administration → Custom Properties). В Automation Manager створіть AMP, чий об'єкт Run PowerShell Script прив'язує вхідний параметр Token до цієї користувацької властивості. Скрипт:
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
Значення користувацької властивості надходить як $Token. Воно ніколи не з'являється в експортованому XML AMP або в журналі аудиту N-central.
Репозиторій скриптів: отримання облікових даних під час виконання
Для ad-hoc скриптів, що надсилаються через Репозиторій скриптів (Configuration → Repository → Scripts/Software), кінцева точка вже ініціалізована — скрипт просто викликає 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 (раніше SolarWinds RMM) використовує той самий механізм Automation Manager, що й N-central, а також Script Manager для скриптів .ps1, AMP, batch та інших типів. Шаблон відображає N-central: AMP з вхідним параметром для токена, а потім все інше розпізнається під час виконання.
Script Manager: встановлення через автоматизоване завдання
Завантажте Install-Clavitor.ps1 до Settings → Script Manager з параметром для токена. Прикріпіть його як автоматизоване завдання на кінцевій точці; передайте токен як аргумент скрипта з налаштування рівня пристрою:
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
Автоматизоване завдання: заплановане резервне копіювання з обліковими даними зі сховища
Після ініціалізації заплановані завдання отримують облікові дані зі сховища. Будь-який стандартний вивід довжиною до 255 символів відображається назад на дашборді 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
Скрипти NinjaOne, що виконуються на кінцевій точці, можуть читати та записувати користувацькі поля за допомогою вбудованих командлетів: Ninja-Property-Get <name> повертає значення, Ninja-Property-Set <name> <value> записує його назад. Зберігайте токен Clavitor у користувацькому полі організації (тип Secure, щоб він був доступний лише для запису з консолі); скрипт встановлення читає його один раз.
Скрипт встановлення: читання токена з користувацького поля
В Administration → Library → Custom Fields додайте поле організації clavitorToken типу Secure. Потім запустіть скрипт встановлення:
$token = Ninja-Property-Get clavitorToken $token | clavitor-cli init Remove-Variable token
Користувацька дія: виклик API через проксі
Після встановлення автоматизації викликають зовнішні API через проксі — облікові дані ніколи не копіюються у змінну скрипта:
$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 надає користувацькі поля активів та теги як змінні платформи Platform за допомогою синтаксису подвійних фігурних дужок {{asset_custom_field_<name>}}. Визначте змінну скрипта типу Platform і прив'яжіть її до поля — Syncro замінює значення в параметрі PowerShell під час виконання скрипта.
Скрипт Syncro: встановлення
Створіть користувацьке поле активу clavitor_token. В редакторі скриптів оголосіть змінну Token типу Platform, прив'язану до {{asset_custom_field_clavitor_token}}; передайте її до параметра PowerShell у тілі скрипта:
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
Панель швидкої допомоги внизу кожного редактора скриптів Syncro містить список усіх доступних змінних платформи для контексту активу, клієнта та квитка.
Скрипт Syncro: підключення VPN за допомогою облікових даних зі сховища
Після встановлення скрипти та автоматизовані засоби виправлення розпізнають облікові дані зі сховища та використовують їх безпосередньо:
$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
Чому це важливо для MSP
Кожна платформа RMM зберігає облікові дані десь — користувацькі властивості, змінні сайту, додаткові поля даних, параметри скриптів. Кожен технічний спеціаліст з доступом до консолі може їх бачити. Кожне порушення безпеки вашої консолі RMM розкриває облікові дані кожного клієнта.
Clavitor переміщує облікові дані з RMM. RMM зберігає лише токен агента (один на клієнта). Токен надає обмежений доступ до сховища цього клієнта. Порушення безпеки вашої консолі RMM розкриває токени, а не облікові дані — і кожен токен має IP-білий список для кінцевої точки, на яку він був розгорнутий.
Обмежено за клієнтом
Кожне сховище клієнта має власний токен агента. Доступ технічного спеціаліста контролюється за областю дії, а не за тим, "хто може увійти до консолі RMM".
Аудит за скриптом
Кожен доступ до облікових даних реєструється — який скрипт, яка кінцева точка, які облікові дані, коли. Ваші клієнти можуть бачити журнал аудиту. Ви можете довести, хто і що отримав доступ.
Відкликано одним кліком
Клієнт пішов? Відкличте їхній токен агента. Кожна кінцева точка негайно припиняє розпізнавання облікових даних. Немає паролів для ротації, немає користувацьких властивостей для очищення на 200 машинах.
Припиніть зберігати облікові дані у вашій RMM.
Один CLI. Кожен клієнт. Кожні облікові дані з обмеженим доступом, аудитом та можливістю відкликання.