Windows Agent Abfrage über SSH

Hallo :),

da ich eine Weile gebraucht habe, den Windows Agenten über SSH abzufragen,vor allem da viele Windows SSH Anleitungen für ältere Windows 10 Versionen sehr Unterschiedlich sind,
habe ich hier mal eine Anleitung wie ich es in einer Testumgebung eingerichtet habe, vielleicht hilft es ja jemandem weiter.

Hosts:
CheckMK Server /im folgenden als Server betitelt // läuft auf einem Ubuntu 20.04.1 LTS
Windows mit CheckMK Agent /im folgenden als Client betitelt // in diesem Test ein Windows 10 1909

Vorausssetzungen:
Server ist bereits installiert und eine Site erstellt
Client ist bereits installiert, CheckMK Agent ebenfalls
Client ist in CheckMK bereits angelegt und wird normal über den CheckMK Agent abgefragt. Man kann natürlich auch einen komplett neuen Client verwenden und direkt mit SSH starten aber
in diesem Beispiel gehe ich von einem bereits in CheckMK eingerichteten Host aus.

Hinweis bei älteren Windows 10 Versionen kann das durchaus noch anders aussehen
bei vielen Anleitungen im Internet werden z.b. noch OpenSSHUtils verwendet.

Vorbereitung: Windows “Client”
Installation des OPEN-SSH Servers über App & Features Optionale Features Installieren



Dienst starten und auf Autostart setzen

Um später den Public key zu speichern legen wir unter C:\Users\Benutzername den Ordner .ssh an

Vorsicht ab jetzt ist der Server erreichbar, test von einem anderen Windows PC aus

Authentifizierung über Benutzername und Passwort ssh benutzer@servername
Im nächsten Schritt wird mithilfe von ssh-keygen ein Schlüsselpaar erstellt. Auf welchem Gerät man diesen erstellt ist egal, die jeweiligen Dateien müssen danach
aber in die richtigen Verzeichnisse auf Server und Client.
In diesem Beispiel erstelle ich das Schlüsselpaar auf dem CheckMK Server.

Vorbereitung: CheckMK Server:
Verbindung zum Server herstellen (ssh benutzername@servername)
zum root werden mit sudo su -

dann in der site anmelden mit omd su sitename

Als nächstes wechsle ich direkt in das Verzeichnis wo später der Privat Key abgelegt werden muss mit cd .ssh/
Sollte der Ordner nicht vorhanden sein, stelle ich einmal eine Verbindung zum Windows SSH Server her ssh benutzername@servername, und trenne die Verbindung wieder mit Exit
Danach sollte der Wechsel in den Ordner .ssh/ klappen

Als nächstes erstelle ich das Schlüsselpaar. Ich habe noch nicht geschaut ob es hier andere Best Practice Möglickeiten gibt, falls ja gerne antworten/kommentieren.
ssh-keygen

“enter”

“enter” // der CheckMK Server kann meines Wissens nach kein Passphrase verwenden für den Zugriff auf den Privat Key
“enter” // nochmal bestätigen

Als nächstes Kopieren wir den Public Key auf den Client

scp id_rsa.pub benutzername@servername:"c:\users\benutzername\.ssh\authorized_keys"

Vorbereitung CheckMK Server Shell abgeschlossen

exit // dreimal zum ausloggen aus der site, zum ausloggen von root und zum trennen der ssh Verbindung

Vorbereitung Windows “Client”
Als nächstes richten wir eine Command restriction ein( https://docs.checkmk.com/latest/de/agent_windows.html //unter 8.3), damit beim Zugriff über ssh nur der CheckMK Agent gestartet werden kann, außerdem deaktivieren wir den Zugriff über Benutzername Passwort und aktivieren statt dessen den Zugriff über Pubkey
Unter “C:\Users\Benutzername.ssh” liegt jetzt die Datei authorized_keys, diese mit Notepad öffnen und an den Anfang der vorhanden Zeile folgendes einfügen und speichern.
command="\"C:\\Program Files (x86)\\checkmk\\service\\check_mk_agent.exe\" test"

als nächstes die Kommandozeile oder die Powershell als Administrator öffnen und folgenden Befehl ausführen
notepad $env:PROGRAMDATA\ssh\sshd_config
In der SSH Config nehmen wir bei drei Punkten die # raus, damit diese nicht mehr auskommentiert sind und wir ändern die Einstellungen:
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no


// Hier wie oben sollte noch jemand Best Practice Einstellungen für die config haben bitte gern antworten/kommentieren
danach speichern und den openssh Dienst noch mal neu starten

Vorbereitung am Windows Client abgeschlossen,
nach Umstellung auf SSH im CheckMK kann die Firewall Regel für CheckMK rausgenommen werden und auch der CheckMK Service beendet werden siehe
https://docs.checkmk.com/latest/de/agent_windows.html //unter 8.3

Vorbereitung in CheckMK
Unter Host & Service Parameters
Datasource Programs
Individual program call instead of agent access
Hier eine neue Regel erstellen
Unter Command line to execute folgendes einfügen
ssh benutzername@$HOSTADDRESS$

und unter Condition festlegen welche Geräte über ssh abgerufen sollen werden, in diesem Test mache ich das über Explicit hosts, bei mehreren sollte lieber ein Folder oder Tag verwendet werden
Jetzt noch die Änderungen anwenden, danach wird der Client über SSH abgefragt.

Eines ist mir noch aufgefallen, wenn ich die Abfrage in der shell mache, statt über CheckMk dann bringt er einen Fehler beim Aufruf von ssh benutzername@servername

wenn allerdings ein Leerzeichen als Parameter oder der Parameter -T angegeben wird dann funktionierts.
ssh -T benutzername@servername
ssh benutzername@servername " "

Ein weiterer Punkt ist mir auch noch eingefallen, ich habe noch nicht durchprobiert welche minimalrechte der Windows User der verwendet wird hier benötigt.

mit freundlichen Grüßen

Markus

12 Likes