Shell Command vs Terminal

Hallo, ich versuche mir eine Shell Command zum ssh Zugriff auf mein Qnap NAS anzulegen.

SSH Zugriff auf dem NAS ist aktiviert, RSA Schlüssel sind auf dem NAS und in HA angelegt.

Wenn ich nun den Befehl

ssh admin@192.168.1.xxx ‘echo mem > /sys/power/state’

im Terminal aufrufe, funktioniert es wie gewünscht und das NAS legt sich schlafen.

Als Shell command

shell_command:
qnap_sleep: ssh admin@192.168.1.xxx ‘echo mem > /sys/power/state’ 

oder auch

ssh -i /root/ssh/id_rsa -o ‘StrictHostKeyChecking=no’ admin@192.168.1.xxx ‘echo mem > /sys/power/state’

funktioniert es aber nicht. Da taucht in den QNap Logs dann auch immer “Anmeldung fehlgeschlagen” auf.

Wo .liegt hier der Fehler bzw. warum funktioniert es übers Terminal und nicht über die Shell Commands?

:crayon:by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)
s.a.: (Neues Update & Features - Hier in der Community 🫶)

Vermutung: Shell_Commands wird keinen Zugriff auf das Zertifikat haben. Eventuell Pfad nicht bekannt oder unzureichende Zugriffsrechte.

Wenn du testweise im shell_command

qnap_sleep: ssh admin:password@192.168.1.xxx ‘echo mem > /sys/power/state’ 

das mit Passwort probierst, gehts dann?

Funktioniert leider auch nicht, auch dann erscheint in den QNap logs “Anmeldung fehlgeschlagen”

Hast du dir das hier mal durchgelesen?

Das könnte bei dir die gleiche Sache sein.

Wenn ich das auf meiner DS mache, dann funktioniert das nur unter root aber nicht unter admin, selbstverständlich mit anderen Befehlen.

Wenn das Schlüsselpaar korrekt ist, dann braucht man kein PW.

–
MfG Kurt

Ich vermute auch, daß Shell Command nicht auf den hinterlegten rsa key zugreift, darum scheitert auch die ssh Anmeldung am QNap NAS. Über das Terminal funktioniert es ja.

Der Schlüssel wurde bei der Erzeugung übers Terminal im Verzeichnis root abgelegt. Kann es damit zusammenhängen?

Was kann man tun?

Wo läuft deine HA Installation? Bare Metal mit HAOS z. B. auf einem Raspberry? Oder virtualisiert in einer VM, Docker?

Hast du abweichend HA unter einem anderen, eingeschränkten User laufen? Wenn die RSA Keys im Verzeichnis /root liegen, HA aber unter einem anderen User läuft darf er das Verzeichnis nicht lesen.

Hast du Logs im HA geprüft, findest du da irgendwelche ssh Meldungen?

Alternativ zum direkten Aufruf des ssh Befehls könntest du dir ein Script auf OS anlegen welches den ssh Befehl absetzt und dann dieses Script als “shell_command” aufrufen.

Würde so in etwa aussehen. Du kannst auch Argumente mitgeben falls du es nicht nur für einen Host nutzen möchtest.

shell_command:
  extract_valve: bash ./custom_scripts/extractvalve.sh "{{ arguments1 }}"
  rename_habackup: bash ./custom_scripts/renamebackup.sh
  reboot_remote: bash ./custom_scripts/ssh_reboothost.sh "{{ arguments1 }}"

Edit, beim Posten gesehen dass eines meiner Scripte das macht was du vorhast, Reboot statt Shutdown. Falls du es testen willst … musst nur etwas anpassen. Läuft bei mir in Docker

#!/bin/bash
#

sshkey="/config/.ssh/id_ed25519"
sshuser="hasshcheck"
sshhost=$1

if [[ $sshhost = "docker.internal" ]]
then
  sshhost=$(echo $(/sbin/ip route|awk '/default/ { print $3 }'))
  #echo "dockerhost $sshhost"

fi

timeout 900 ssh "$sshuser@$sshhost" -i $sshkey -o StrictHostKeyChecking=no > /dev/null sudo /usr/sbin/shutdown -r now  >  /dev/null && echo 1 || echo 0

#add ssh to new server
#1) useradd -m hasshcheck
#2) ssh keys kopieren

Jo, und wenn das Schlüsselpaar nicht erreichbar ist?
Da fällt mir ein: Bei der ersten Verbindung mit ssh, wird man normalerweise gefragt, ob der Host der richtige ist. Diese Frage wirst sicherlich nicht angezeigt und daher der Schlüssel nicht an der Stelle abgelegt, wo er von shell_command gelesen werden kann.

Danke, aber das ist mir jetzt ein zu grosser Sprung, bin da noch nicht so weit mit den Befehlen :wink:

Home Assistant läuft auf einem HA Green und der User gehört zwar zur Administratoren Gruppe, hat aber keinen Systemzugriff. Könnte man den rsa key nicht in einem für Shell Command lesbaren (nicht root) Ordner speichern?

Die HA logs geben für alle Versuche den Fehler 255 aus
Error running command: `ssh -i /root/.ssh/id_rsa -q admin@192.168.1.xxx “echo mem > /sys/power/state”`, return code: 255

…ich würde es gerne so einfach wie möglich halten, im Terminal funktioniert es ja ohne Probleme…

Annahme: Du nutzt HAOS. Wo hast du die Keys abgelegt. Console direkt am PC, oder Console im Supervisor? Wenn du HAOS nutzt läuft das intern auch als Container. Somit ist /root nicht gleich /root.

Direkt am PC. Root Verzeichnis leer

Im Supervisor, Root Verzeichnis voll

Syntax ist falsch, ssh-Befehl erlaubt keine direkte Passworteingabe (Security). Dazu musst du Tools wie sshpass nutzen.

Du meinst vermutlich die einmalige Abfrage um den Host in “known_hosts” einzutragen. Da er dass auf der Console gemacht hat sollte das schon passiert sein.

genau, die Abfrage wurde bereits im Terminal bestätigt.

Mach mal einen screenshot von der Console mit der Ausgabe von

whoami
pwd
ls -l

Wenn pwd als ausgabe “/” hat

cd /root
ls -l

Den Ordner /root/ssh sehe ich in deinem Screenshot nicht. Wo sind jeztt deine ssh Keys?

image

Kannst du, z. B. unter /config/ssh legen. Für dein Verständnis ist wichtig dass du im Supervisor (Container) bist und Verzeichnis ssh was anderes als .ssh (mit führendem Punkt) ist. Damit du .ssh siehst brauchst du den Befehl ls -la. Stansdard für ssh ist /root/.ssh …

Dann ist der Befehl falsch. Der Punkt vor dem ssh fehlt.

…aber wo muss der key denn liegen, damit Shell command darauf zugreifen kann und die Anmeldung am NAS klappt?

Ändere den Befehl auf den Richtigen Pfad und teste nochmal. Wenn es nicht funktioniert dann setze Loglevel auf info und poste das Log