Aufruf des Agenten auf OpenWRT via SSH liefert exit code 127

Hi!
Ich habe vor einiger Zeit auf meinem OpenWRT den entsprechenden Agenten installiert und auch erfolgreich mit dem CheckMK verheiratet. Jetzt habe ich meinen Router mal komplett neu aufgestetzt und habe auch den Agenten wieder installiert, allerdings gibt mir die Web-Ansicht immer diesen Fehler aus:

[agent] Program ‘ssh’ not found (exit code 127)CRIT, Got no information from host, execution time 1.0 sec

Das ist recht merkwürdig, denn vorher hatte es mit genau der gleichen Config wunderbar funktioniert. Ich habe auch schon den vollen Pfad (/usr/bin/ssh) angegeben, ohne Erfolg.

Hier mal noch ein paar Debug-Ausgaben:

$ cmk -D OpenWRT

OpenWRT
Addresses:              192.168.0.1
Tags:                   [address_family:ip-v4-only], [agent:cmk-agent], [criticality:prod], [ip-v4:ip-v4], [networking:lan], [piggyback:auto-piggyback], [site:checkmk], [snmp_ds:no-snmp], [tcp:tcp]
Labels:                 [cmk/os_family:openwrt]
Host groups:            check_mk
Contact groups:         all
Agent mode:             Normal Checkmk agent, or special agent if configured
Type of agent:
  Program: /usr/bin/ssh root@OpenWRT /usr/bin/check_mk_agent.openwrt
  Process piggyback data from /omd/sites/checkmk/tmp/check_mk/piggyback/OpenWRT

und

$ cmk -d OpenWRT -vvvv
Calling: /usr/bin/ssh root@OpenWRT /usr/bin/check_mk_agent.openwrt
[ProgramFetcher] Fetch with cache settings: DefaultAgentFileCache(base_path=PosixPath('/omd/sites/checkmk/tmp/check_mk/cache/OpenWRT'), max_age=MaxAge(checking=0, discovery=120, inventory=120), disabled=False, use_outdated=False, simulation=False)
Not using cache (Does not exist)
[ProgramFetcher] Execute data source
ERROR [agent]: Program '/usr/bin/ssh' not found (exit code 127)(!!)
No piggyback files for 'OpenWRT'. Skip processing.
No piggyback files for '192.168.0.1'. Skip processing.
[PiggybackFetcher] Fetch with cache settings: NoCache(base_path=PosixPath('/omd/sites/checkmk/tmp/check_mk/data_source_cache/piggyback/OpenWRT'), max_age=MaxAge(checking=0, discovery=120, inventory=120), disabled=False, use_outdated=False, simulation=False)
[PiggybackFetcher] Execute data source
Loading autochecks from /omd/sites/checkmk/var/check_mk/autochecks/OpenWRT.mk
No persisted sections loaded
No piggyback files for 'OpenWRT'. Skip processing.
No piggyback files for '192.168.0.1'. Skip processing.

Wenn ich den Agenten direkt aufrufe, funktioniert es:

$ /usr/bin/ssh root@OpenWRT /usr/bin/check_mk_agent.openwrt | head
<<<check_mk>>>
Version: 2.0.0p12
AgentOS: openwrt
Hostname:
AgentDirectory: /etc/check_mk
DataDirectory: /var/lib/check_mk_agent
SpoolDirectory: /var/lib/check_mk_agent/spool
PluginsDirectory: /usr/lib/check_mk_agent/plugins
LocalDirectory: /usr/lib/check_mk_agent/local
<<<df>>>

Was mache ich hier falsch, oder übersehe ich hier etwas Grundsätzliches?

Vielen Dank für Eure Hilfe!

Hallo @Tamas und willkommen in der checkmk Community.

Es sieht so aus, als existiert ssh unter dem Pfad /usr/bin/ssh nicht auf deinem System. Bitte prüfe einmal, wo sich ssh befindet und lege gegebenenfalls einen Symlink an.
Abhängig von deiner Linux-Distribution kann dir entweder which ssh oder auch locate ssh helfen, die korrekte binary zu finden.

Hi!

Das hatte ich schon geprüft, weil es ja zuerst nur mittels “ssh” abgefragt wurde und ich da auch schon etwas in die Richtung vermutet hatte…

OMD[checkmk]:~$ which ssh
/usr/bin/ssh

Das Kommando existiert und kann ja manuell ohne Probleme ausgeführt werden.

Es muss etwas anderes sein …

Ist SSH auch vom Siteuser aus ausführbar (ich vermute other +x)?

Ist SELinux aktiviert oder ein anderer ACL Service, der die Ausführung für spezielle User einschränken könnte?

ssh ist für “other” ausführbar:

OMD[checkmk]:~$ ls -la /usr/bin/ssh
-rwxr-xr-x 1 root root 727848 Jan 31  2020 /usr/bin/ssh*

SELinux habe ich nicht installiert oder aktiviert.

Beim Unterschied manuelle vs automatische Ausführung von ssh fällt mir erstmal das fehlende Terminal beim nicht-interaktiven Aufruf ein. Um auch da ein (pseudo-) Terminal zuzuweisen, kannst du dem ssh-Aufruf ein “-t” mitgeben. Die Fehlermeldung klingt zwar nicht danach, aber einen raschen Versuch ist es wert.

Hi!

Ich habe mal auf der Konsole das -t beim Anruf hinzugefügt:

OMD[checkmk]:~$ /usr/bin/ssh -t root@OpenWRT /usr/bin/check_mk_agent.openwrt | head
<<<check_mk>>>
Version: 2.0.0p12
AgentOS: openwrt
Hostname:
AgentDirectory: /etc/check_mk
DataDirectory: /var/lib/check_mk_agent
SpoolDirectory: /var/lib/check_mk_agent/spool
PluginsDirectory: /usr/lib/check_mk_agent/plugins
LocalDirectory: /usr/lib/check_mk_agent/local
<<<df>>>
Connection to openwrt closed.

Außerdem habe ich das mal noch bei der Regel für den Host hinzugefügt:

OMD[checkmk]:~$ cmk -d OpenWRT -v
[ProgramFetcher] Execute data source
ERROR [agent]: Program '/usr/bin/ssh' not found (exit code 127)(!!)
No piggyback files for 'OpenWRT'. Skip processing.
No piggyback files for '192.168.0.1'. Skip processing.
[PiggybackFetcher] Execute data source
No piggyback files for 'OpenWRT'. Skip processing.
No piggyback files for '192.168.0.1'. Skip processing.
OMD[checkmk]:~$ cmk -D OpenWRT | head

OpenWRT
Addresses:              192.168.0.1
Tags:                   [address_family:ip-v4-only], [agent:cmk-agent], [criticality:prod], [ip-v4:ip-v4], [networking:lan], [piggyback:auto-piggyback], [site:checkmk], [snmp_ds:no-snmp], [tcp:tcp]
Labels:                 [cmk/os_family:openwrt]
Host groups:            check_mk
Contact groups:         all
Agent mode:             Normal Checkmk agent, or special agent if configured
Type of agent:
  Program: /usr/bin/ssh -t root@OpenWRT /usr/bin/check_mk_agent.openwrt
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
BrokenPipeError: [Errno 32] Broken pipe

Aber das hat leider keine Änderung gebracht.

Hallo zusammen,
ich habe noch etwas herumprobiert und bekomme diesen Fehler einfach nicht mehr weg. Kann es vielleicht auch sein, dass der Agent etwas zurückgibt, was CheckMK nicht interpretieren kann und deswegen der Fehler kommt? Kann man das vielleicht irgendwie debuggen?

Dieser Fehler ist schon sehr eindeutig in seiner Aussage.
Mehr als auf der Kommandozeile hast du kaum, außer eigene prints in den Agenten zu packen bleibt da nicht.