Agent Deployment Registrierung

CMK version: 2.4.0p18

Hallo zusammen,

folgendes ist mein Problem:
**
Wir wollen die ‘Agent Deployment Registrierung’ via Powershell-Skript auf unseren Windows-Hosts automatisieren.
Das ganze machen wir bereits via Salt auf unseren Linux Hosts und das auch mit Erfolg.
Unter Windows jedoch funktioniert das ganze nicht, zumindest laut unserer CheckMK Zentrale. Diese sagt nämlich:**

Version: 2.4.0p18, OS: windows, Update error: The agent updater is not registered at the deployment server WARN, No successful connect to server yet **WARN

Führe ich das ganze jedoch in der Powershell auf dem Windows Hosts aus, dann sagt er dass das Deployment Erfolgreich war. Die Meldung verschwindet aber in CheckMK nicht.
Auch nicht nach 60min warten, damit der Cache erneuert wird.**

**Die Linux Hosts aktualiseren dies sofort, wenn via Salt das ganze ausgerollt wird.

Also Benutzer und Passwort des Automation Users ist gleich bei beiden Verfahren.

Befehl der Benutzt wird, bzw Argumente:
**
C:\Program Files (x86)\checkmk\service\check_mk_agent.exe updater register -H Hostname -s Satellit-Server -i Satellit-Name -U Benutzer -P Passwort --trust-cert --force

Ob ich -P oder -S benutze macht vom Ergebnis her keinen Unterschied.

Vielen Dank bereits für die Hilfe.

Gruß
Pascal

Servus,

Ich kann Dir nur das Kommando geben da wir seit Jahren in Ivanti einsetzen um Windows Hosts zu Registrieren:

check_mk_agent.exe updater register -s <server> -i <site> -H <HOSTNAME> -p https -U "<user>" -S "<Autmation Key>"

Danach machen wir noch einen sofortigen Update des Agenten:

check_mk_agent.exe cmk_update_agent -v

Ich habe leider keinen Zugriff auf den code den das verantwortliche Team dafür benutzt.

Gruß

Mike

1 Like

Hallo Mike,

danke für deine Antwort!
Leider hat sie nicht zum gewünschten Ergebnis geführt.

Ich würde auch nochmal meinen Output aus Powershell hier einfügen, damit es für andere villt. noch verständlicher wird.

PS C:\Program Files (x86)\checkmk\service> .\check_mk_agent.exe updater register -s <Satellit Server> -i <Satellit Name> -H <Hostname> -U <User> -P <Password> -p https --trust-cert -v
Updated the certificate store “C:\ProgramData\checkmk\agent\config\cas\all_certs.pem” with 2 certificate(s)

┌───────────────────────────────────────────────────────────────────┐
│ │
│ Checkmk Agent Updater v2.4.0p18 - Registration │
│ │
│ Activation of automatic agent updates. Your first step is to │
│ register this host at your deployment server for agent updates. │
│ For this step you need a user with the permission │
│ “Register all hosts” on that Checkmk site. │
│ │
└───────────────────────────────────────────────────────────────────┘
Using previous settings from C:\ProgramData\checkmk\agent\config\cmk-update-agent.state.
Password for user ‘Username:

Going to register agent at deployment server
Applying new update URL https://Server/…/…/…/ from deployment server
Successfully registered agent of host “Hostname” for deployment.
You can now update your agent by running ‘check_mk_agent.exe updater -v’
Saved your registration settings to C:\ProgramData\checkmk\agent\config\cmk-update-agent.state.

PS C:\Program Files (x86)\checkmk\service> .\check_mk_agent.exe updater -v
Updated the certificate store “C:\ProgramData\checkmk\agent\config\cas\all_certs.pem” with 2 certificate(s)
Starting Update mode as plugin.
Getting target agent configuration for host ‘Hostname‘ from deployment server
Target state (from deployment server):
Agent available: True
Signatures: 1
Target hash: hash-wert
<<<cmk_update_agent_status:sep(0)>>>

In CheckMK ändert sich der Status des CheckMK Agent Service, auch nach längerem warten 1h +, leider nicht.
Es bleibt bei:

Version: 2.4.0p18, OS: windows, Update error: The agent updater is not registered at the deployment serverWARN, No successful connect to server yetWARN

Gruß
Pascal

Und der Befehl hier

passen nicht ganz zusammen, das ist kein Aufruf welcher in Powershell so funktioniert.

In Powershell sollte der Aufruf in etwa so aussehen. Geht auch anders :slight_smile:

$cmdArgList = @( 
    'updater',
    'register', 
    '-s', "$($targetServer)", 
    '-i', "$($targetSite)", 
    '-H', "$($ComputerName)", 
    '-p', 'https', 
    '-U', "$($User)", 
    '-S', "$($Secret)", 
    '-v' ) 
Start-Process "${env:ProgramFiles(x86)}\checkmk\service\check_mk_agent.exe" -ArgumentList $cmdArgList -PassThru -NoNewWindow | Wait-Process

Bei mir im Script sind halt die Variablen alle ausgefüllt mit den entsprechenden Werten.

Dein Aufruf dürfte eigentlich nicht nach einem Passwort fragen da ja in der Commandline schon eins drin steht.

2 Likes

Lösch mal vorher die Datei
C:\ProgramData\checkmk\agent\config\cmk-update-agent.state.

Was wird denn von

check_mk_agent.exe cmk_update_agent -v

nach der Registrierung ausgeworfen?

Was @andreas-doehler geschrieben hat. Hier copy-paste der Aufruf, der in unserem PowerShell-Script funktioniert:

& "C:\Program Files (x86)\checkmk\service\check_mk_agent.exe" updater register --verbose --server monitor.linet-services.de --protocol https --site linet --user agent-registration --secret $AutomationSecret --hostname $HostName

Wichtig ist:

  1. In PowerShell-Scripten müssen (? sollten?) externe Programme (Nicht-Cmdlet-Funktionen) mit & davor ausgeführt werden, wenn nicht via Start-Process.
  2. Leerzeichen im Pfad der Exe erfordern auch bei der PowerShell ein Escaping.

Andreas macht beides richtig, weil er die built-in Start-Process benutzt, und dann halt der escapete Pfad zur Exe.

1 Like

Hallo zusammen,

Danke schon mal für die vielen Rückmeldungen. Das mit dem Skript-Schnipsel von @andreas-doehler, werde ich heute im laufe des Tages mal ausprobieren.

Mein Skript sieht eigentlich folgendes vor:

  1. MSI deinstallieren (weil wir massive Probleme mit dem Agent auf Windowsservern haben und GPO-Rollout mit server Neustarts nicht vorgesehen ist aktuell)
  2. CheckMK MSI installieren
  3. Service neustarten (Warum er das benötigt, weiß ich nicht. Hab ich sonst aber händisch machen müssen.)
  4. Agent Update Deployment Registrieren (Was noch nicht ganz funktioniert)
  5. TLS Registrieren (Funktioniert)


#Serverliste erstellen / abrufen

$Servers = Get-ADComputer -Filter * -Properties Operatingsystem | Where-Object {
$_.operatingsystem -like “Server”
} | Select-Object -ExpandProperty Name

foreach ($Server in $Servers) {
Write-Host “== Bearbeite Server: $Server ==” -ForegroundColor Cyan



# 1. CheckMK Agent MSI deinstallieren
Write-Host "-> Deinstalliere CheckMK Agent MSI auf $Server..." -ForegroundColor Yellow
& $PSExecPath -accepteula -s -d \\$Server msiexec /x "<Product-GUID>" /quiet /qn /norestart


# Optional kurze Wartezeit
Start-Sleep -Seconds 2


# 2. CheckMK Agent MSI installieren
Write-Host "-> Installiere CheckMK Agent MSI auf $Server..." -ForegroundColor Yellow
& $PSExecPath -accepteula -s -d \\$Server msiexec /i "\\Domain\SYSVOL\Domain.FQDN\msi\checkmkagent.msi" /quiet /qn /norestart


# Optional kurze Wartezeit
Start-Sleep -Seconds 2


# 3. CheckMK Service neu starten
Write-Host "-> Starte 'CheckMK Service' neu auf $Server..." -ForegroundColor Yellow
& $PSExecPath -accepteula -s -d \\$Server powershell -Command "Restart-Service -Name 'CheckmkService' -Force"


# Optional kurze Wartezeit
Start-Sleep -Seconds 2


 #4. Agent Update Deployment Registrierung
$srvLower = ([System.Net.Dns]::GetHostByName($Server).HostName).ToLower()

Write-Host "-> Registriere 'CheckMK Agent Deployment' auf $Server..." -ForegroundColor Yellow

# Remote Script
$remoteScript = @"
    Start-Process 'C:\Program Files (x86)\checkmk\service\check_mk_agent.exe' -ArgumentList 'updater register -s <Server> -i <Satellit> -H <$srvLower> -U <User> -P <Secret> -p https --trust-cert'

"@
& $PSExecPath -s \$Server powershell -NoProfile -ExecutionPolicy Bypass -Command $remoteScript

# Optional kurze Wartezeit
Start-Sleep -Seconds 2


#5. Agent TLS Registrierung
$srvLower = ([System.Net.Dns]::GetHostByName($Server).HostName).ToLower()

Write-Host "-> Registriere 'CheckMK Agent TLS Kommunikation' auf $Server..." -ForegroundColor Yellow

# Remote Script
$remoteScript = @"
    Start-Process 'C:\Program Files (x86)\checkmk\service\cmk-agent-ctl.exe' -ArgumentList 'register -H $srvLower -s <Server> -i <Satellit> -U <User> -P <Secret> --trust-cert'

"@

& $PSExecPath -s \\$Server powershell -NoProfile -ExecutionPolicy Bypass -Command $remoteScript


# Optional kurze Wartezeit
Start-Sleep -Seconds 2

}

Das ganze soll kein Powershell Tutorial werden, aber villt hilft es ja, hier meinen Fehler zu identifizieren.

@mike1098 Die Ordner von CheckMK habe ich bei meinen Testservern tatsächlich immer alle gelöscht. Bei einem Server auch in der Registry Keys gelöscht.

Aber wie gesagt, werde ich nachher das von @andreas-doehler einbauen und testen.
Ich werde Rückmeldung geben!

Vielen Dank!

Gruß
Pascal

Vielen Dank!

Ich habe das ganze nun in mein Skript eingebaut und erfolgreich testen können.

In der Zentrale sieht alles sehr gut aus. Die Aktualisierung des “CheckMK Agent” Service auf OK erfolgt direkt.

Gruß
Pascal