Wie entfernte Docker-Container an- und abschalten?

ChristianKnorr

New member
Hallo zusammen,
HA läuft in der KVM in openmediavault. Daneben gibt es in OMV diverse Container, die ich mit HA starten und stoppen möchte. Hintergrund ist, dass die Festplatten schlafen sollen, was sie nicht tuen wenn z.B. plex läuft.

Im weiteren Schritt (was aber nicht das Problem hier ist) soll dann das funktionieren: Alexa, schalte Plex an|aus

Meine erste Idee war ein shell_command abzusetzen, mit welchem via ssh docker getriggert wird. Das dauert aber ziemlich lange, bis die Gegenseite alleine reagiert.

Bessere Ideen?
 
Hi :)
Meine erste Idee war ein shell_command abzusetzen, mit welchem via ssh docker getriggert wird. Das dauert aber ziemlich lange, bis die Gegenseite alleine reagiert.
Was heisst "lange"? Normalerweise ist es doch nur ein "docker stop <Container-ID/Name>", geht das direkt auf dem OMV-Host schneller? Also ich halte das mit dem Shell-Command schon für eine passable Lösung.
 
Hi :)

Was heisst "lange"? Normalerweise ist es doch nur ein "docker stop <Container-ID/Name>", geht das direkt auf dem OMV-Host schneller? Also ich halte das mit dem Shell-Command schon für eine passable Lösung.
Mein Test war auf der Konsole eines anderen Rechners. Es dauert da 1,5 bis 2 Sekunden bis ich das Passwort eingeben kann. Klar, das müsste HA später nicht aber ich dachte, das würde dann auch nicht schneller gehen.
Der eigentliche dahintergeschaltete Befehl wird nicht länger dauern als im OMV selber.
 
Es dauert da 1,5 bis 2 Sekunden bis ich das Passwort eingeben kann. Klar, das müsste HA später nicht aber ich dachte, das würde dann auch nicht schneller gehen.
Naja, "instant" wird es über Remote-Systeme nicht funktionieren, das hängt mitunter auch mit der Reaktionszeit der Gegenstelle ab. Ich würde es einfach mal mit einem entsprechenden SSH-Key ausprobieren. Faktisch hast Du ja hinterher sowieso nichts mehr zu tun, als im HA zu sagen, dass ein Container ausgeschaltet werden soll. Ob das jetzt 2 oder 5 Sekunden dauert, dürfte ja eigentlich auch keine Rolle spielen.
 
Also ich habe mir das Terminal-Addon installiert und habe einen Key angelegt, womit ich ohne Passwort auf die entfernte Maschine zugreifen kann. Mit:
Bash:
ssh homeassistant@192.168.178.145 sudo docker start plex
klappt der Aufruf und der Container wird gestartet.

Diese Zeile habe ich in der configuration.yaml:
YAML:
shell_command:
  container_plex_start: ssh homeassistant@192.168.178.145 sudo docker start plex

Dann habe ich ein input_boolean.container_plex erstellt. Mit dieser Automation wird das dann ausgeführt:
YAML:
alias: Plex on
description: ""
trigger:
  - platform: state
    entity_id:
      - input_boolean.container_plex
    to: "on"
condition: []
action:
  - service: shell_command.container_plex_start
    data: {}
    response_variable: exit_code_plex_started
mode: single

Klappt aber nicht. Im Log der entfernten Maschine finde ich:
Code:
Nov  4 05:17:26 qnapomv sshd[635924]: Connection closed by 192.168.178.147 port 41244 [preauth]
Wohingegen der Test aus dem Terminal so aussah:
Code:
Nov  4 05:17:01 qnapomv CRON[635730]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Nov  4 05:17:01 qnapomv CRON[635730]: pam_unix(cron:session): session closed for user root
Nov  4 05:17:06 qnapomv sshd[635757]: Accepted publickey for homeassistant from 192.168.178.147 port 45382 ssh2: RSA SHA256:xxxyyyzzz
Nov  4 05:17:06 qnapomv sshd[635757]: pam_unix(sshd:session): session opened for user homeassistant(uid=1001) by (uid=0)
Nov  4 05:17:06 qnapomv systemd-logind[974]: New session 2797 of user homeassistant.
Nov  4 05:17:06 qnapomv systemd: pam_unix(systemd-user:session): session opened for user homeassistant(uid=1001) by (uid=0)
Nov  4 05:17:07 qnapomv sudo: homeassistant : PWD=/home/homeassistant ; USER=root ; COMMAND=/usr/bin/docker status plex
Nov  4 05:17:07 qnapomv sudo: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1001)
Nov  4 05:17:07 qnapomv sudo: pam_unix(sudo:session): session closed for user root
Nov  4 05:17:07 qnapomv sshd[635784]: Received disconnect from 192.168.178.147 port 45382:11: disconnected by user
Nov  4 05:17:07 qnapomv sshd[635784]: Disconnected from user homeassistant 192.168.178.147 port 45382
Nov  4 05:17:07 qnapomv sshd[635757]: pam_unix(sshd:session): session closed for user homeassistant
Nov  4 05:17:07 qnapomv systemd-logind[974]: Session 2797 logged out. Waiting for processes to exit.
Nov  4 05:17:07 qnapomv systemd-logind[974]: Removed session 2797.

Sieht doch so aus, als ob der Key den ich im Terminal angelegt habe nicht HA genutzt wird, oder?
 
Versuch mal bei dem SSH-Befehl den privaten Schlüssel mit anzugeben, mal schauen ob das klappt:
Bash:
ssh -i /pfad/zum/private.key homeassistant@192.168.178.145 sudo docker start plex
 
Na der für den Benutzer "homeassistant", mit welchem Du Dich ja wohl offensichtlich am Remote-System anmeldest:
container_plex_start: ssh homeassistant@192.168.178.145 sudo docker start plex[/CODE]
Folglich gehe ich auch mal davon aus, dass der Benutzer "homeassistant" auf Deiner QNAP angelegt wurde und entsprechend das Recht hat, sudo-Befehle auch ohne Passwort-Abfrage einzugeben.
 
Achso am entfernten Rechner... Nein, das geht ebenfalls nicht.
Ich glaube aber, dass das Terminal-Addon eh nicht das Gleiche ist wie der HA-Unterbau. Habe mir eine Datei im tmp Ordner anlegen lassen die ich im Terminal nicht finde.
 
Fang vielleicht lieber erstmal so an:

Der User mit welchem Du auf dem QNAP via Shell die Docker-Container (inkl. sudo und "ohne" Passwortabfrage) startest und stoppst, hat ja wohl irgendeine Form von Login via SSH (nennen wir den User einfach mal "user1", Du ersetzt bei Dir bitte "user1" durch den User, welchen Du dafür verwendest).

Mit genau "diesem" User ("user1") musste Du Dich auch von HomeAssistant an der QNAP via SSH anmelden. Wenn Du Dich via SSH mit "user1" an der QNAP anmeldest und einen Befehl via "sudo" ausführst, wirst Du erneut nach dem Passwort von "user1" gefragt? Falls ja, muss das weg. Das kannst Du in der sudoers-Datei ändern. Dazu führst Du einfach folgenden Befehl aus: sudo visudo (da ist direkt eine Syntax-Überprüfung mit dabei), alternativ kann man die Datei /etc/sudoers auch editieren. Folgendes muss nun rein:
user1 ALL=(ALL) NOPASSWD:/usr/bin/dockerd
Das sollte dann auf Docker beschränkt sein, falls das nicht funktioniert, gibt es auch noch die Möglichkeit, die Beschränkung auf Docker aufzuheben, das sieht dann so aus:
user1 ALL=(ALL) NOPASSWD:ALL
Dann ist es möglich, ein sudo ohne erneute Passwortabfrage durchzuführen. Auch mal ausprobieren, ob es funktioniert.

Nachdem der Teil durch ist, bleibt noch die Sache mit der passwortlosen SSH-Verbindung. Auf der HomeAssistant-Kiste via z.B. Terminal-Addon erzeugst Du ein neues Schlüsselpaar z.B. via ssh-keygen -b 2048 -t rsa. Der öffentliche Teil des Schlüssels muss jetzt auf die QNAP übertragen werden (genauer gesagt in die Datei /home/"user1"/.ssh/authorized_keys auf der QNAP), das kannst Du aber ganz einfach erledigen mit folgendem Befehl ssh-copy-id -i /pfad/zu/deinem/ssh-PUB.key user1@<qnap-host> (musst Du natürlich noch auf Deine aktuellen Gegebenheiten anpassen).

Sobald das korrekt durchgeführt wurde, kannst Du die SSH-Verbindung von HomeAssistant zur QNAP einmal testen: ssh user1@<qnap-host>. Das ganze sollte einfach sofort ohne Passwortabfrage funktionieren. Via SSH mit der QNAP verbunden, kannst Du dann testweise mal bzgl. der Steuerung eines Containers schauen via sudo docker start plex, auch hier dürfte keine erneute Passwortabfrage kommen. Wenn das alles soweit funktioniert, bist Du schon auf einem guten Weg und kannst das ganze dann nochmal via shell_command testen :)
 
Das mit visudo funktioniert, auch mit den erstellten Keys ohne Passwort, auch mit sudo.
Aber eben nur vom Terminal-Addon, nicht mit meinen shell_command.
ssh-copy-id hat übersprungen, da der Key schon importiert war.
Ich bin diesem Tutorial gefolgt.

Weiterhin habe ich gerade absichtlich einen falschen Usernamen angegeben. Die Meldung am Ziel-System ist immer die Gleiche:
Bash:
Nov  4 17:55:09 qnapomv sshd[951902]: Connection closed by 192.168.178.147 port 37908 [preauth]
 
Ist denn ansonsten nix in den Logs zu finden? Kann die Automatisierung vllt nicht auf den Key zugreifen? Eventuell legt man den mal in das "config"-Verzeichnis?

EDIT: Kannst ggf. auch mal den Paramter -o 'StrictHostKeyChecking=no' mit in den SSH-Befehl packen... Vielleicht stört das noch... dürfte eigentlich nicht (da ja schon eine Verbindung bestand), aber wer weiss...
 
Okay, hier habe ich das /config Verzeichnis gefunden, aber da habe ich von außen keinen Zugriff drauf. Hier das Log mit absichtlich falschem Benutzernamen und einem Test-Befehl:
Code:
2023-11-04 18:48:47.587 ERROR (SyncWorker_0) [homeassistant.components.command_line.utils] Command failed (with return code 255): ssh homeassistant1@qnapomv touch /tmp/homeassistant_was_here
2023-11-04 18:48:47.590 ERROR (MainThread) [homeassistant.components.command_line] Command failed: ssh homeassistant1@qnapomv touch /tmp/homeassistant_was_here
 
und hier mit dem späteren eigentlichen Befehl:
Code:
2023-11-04 18:51:59.475 ERROR (MainThread) [homeassistant.components.shell_command] Error running command: `ssh -i /home/homeassistant/.ssh/id_rsa -o 'StrictHostKeyChecking=no' homeassistant@192.168.178.145 sudo docker start plex`, return code: 255
NoneType: None
 
aber da habe ich von außen keinen Zugriff drauf.
Was meinst Du jetzt mit "aussen"? Es besteht durchaus die Möglichkeit sich via SSH mit der HomeAssistant-Instanz zu verbinden (alternativ eben über das Terminal). Alternativ dazu via "scp", oder Du ziehst Dir den Key auf Deinen Rechner und packst ihn via Samba/CIFS-Freigabe (HA-Addon) auf die HomeAssistant-Instanz in den Config-Ordner. Mit dem eigentlichen KVM-Host hat das derweil garnichts zu tun. Die SSH-Key werden auf der HA-Instanz erstellt und der public-Key zum QNAP geschickt.

Ich hab ein wenig den Eindruck, dass Du das vorherige evtl. auf dem KVM-Host gemacht hast und nicht auf dem HomeAssistant-Host, oder irre ich mich da? Ansonsten wäre es ein einfaches kopieren des privaten Keys (auf der HA-Instanz), wo der Key derzeit liegt hin zum Config-Verzeichnis. Eventuell nochmal via ls -lsha die Berechtigungen kontrollieren.
 
Ich fall' um, es funktioniert. Ich habe den Key in /config/.ssh kopiert und damit geht es:
Code:
ssh -i /config/.ssh/id_rsa -o 'StrictHostKeyChecking=no' homeassistant@192.168.178.145 sudo docker start plex
AAAABER zuvor hatte ich ja auch fälschlicher Weise ssh -i /home/homeassistant/.ssh benutzt, was auf die Datei auf dem Zielsystem verwiesen hätte und nicht auf die auf HA :sleep:
Zuvor stimmte der Pfad /root/.ssh, aber da hatte ich -o 'StrictHostKeyChecking=no' noch nicht drin. Ich habe gerade einige Tests gemacht mit und ohne, das war definitiv die Lösung (y)

Besten Dank :)
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
6.124
Beiträge
59.513
Mitglieder
6.180
Neuestes Mitglied
APPLE-I-SEE
Zurück
Oben