Telnet Verbindung mit Login

Moin zusammen,
ich würde mir gern eine Automation bauen die über Telnet sich auf ein anderes System auf wählt und dort ein Befehl absetzt. Ich probiere dies nun schon seit über 1h und bekomme es nicht hin. Alle Beispiele die ich im Netz dazu finden konnte funktionieren nicht. Ich habe es sogar mit Python probiert, aber da kann ich das Telnet-Module nicht importieren.

Ich habe mir eine .sh Datei angelegt mit folgenden Inhalt:

#!/bin/sh
host=smarthomeserver.local
port=23
login=root
passwd=xxx
cmd='docker stop NodeRed'

echo open ${host}:${port}
sleep 1
echo ${login}
sleep 1
echo ${passwd}
sleep 1
echo ${cmd}
sleep 1
echo exit

Laut dem was ich im Internet finden konnte, sollte dies funktionieren. Leider passiert gar nichts, nicht mal eine Fehlermeldung :frowning:

Hast du dich mal versucht manuell mit dem Rechner zu verbinden? Telnet geht zum Beispiel auch mit Putty. Vielleicht wird Telnet gar nicht unterstützt? Alternative: SSH falls unterstützt!?

Ich habe dies bereits manuell über mein Windows Rechner erfolgreich durchgeführt.

Warum benutzt du denn nicht ssh ?

Wenn das geht, nehme ich auch das :smile: mein Zielserver kann es. Aber wie baue ich eine Verbindung über HA Script auf?

Hast du bei dein sh Script auch die Berechtigung zu Ausführen gegeben?

chmod +x script.sh

Eventuell mit sudo davor.

Ich glaube nicht, dass es ein Problem der Berechtigung ist. Beim ausführen des Scripts über das Terminal kommt keine Fehlermeldung. Es sieht aber nicht danach aus, als würde er etwas machen. Stattdessen wird jeder Befehl nacheinander aufgelistet.
Ich denke, er kann mit den Befehlen einfach nichts Anfang. Wenn ich z.b. den Befehl “open” in der SH Shell eingebe, kann dieser nicht gefunden werden.

Nachtrag:
@crypton ich würde gern auf deinen Vorschlag zurück kommen. Dieser scheint sehr vielversprechend zu sein. Ich habe da aber noch ein kleines Problem mit.

Der Befehl:
ssh root@smarthomeserver.local 'docker start NodeRed'

funktioniert wunderbar für mich. Allerdings wird nach einem Kennwort gefragt. Nun habe ich mich mal schlau gelesen und ich brauche wohl ein Zertifikat, was das Kennwort ersetzt.

Auf den Zielserver habe ich diverse Zertifikate gefunden, glaube ich. Welches muss ich nehmen und wie verwende ich dieses?

ssh_host_ecdsa_key
ssh_host_ecdsa_key.pub
ssh_host_ed25519_key
ssh_host_ed25519_key.pub
ssh_host_rsa_key
ssh_host_rsa_key.pub

Nachtrag2
Ich habe die Lösung gefunden :slight_smile:

Verbindung:
Von “Home Assistant” zum “unRAID”-Server über SSH ohne Kennwort.

In der Home Assistant Shell:

  1. ssh-keygen -t ed25519
  2. ssh-copy-id root@smarthomeserver.local
  3. Kennwort eingeben, fertig.

Nun kann man sich ohne Kennwort von Home Assistant aus mit den unRAID Server verbinden über SSH.

Jetzt kann ich über eine Fernbedienung eine Automation auslösen, die z.b. Docker Container ein/aus schaltet oder, so wie ich es haben möchte, die Windows VM unter unRAID startet. MEGA :slight_smile:

p.s.: root@smarthomeserver.local ist mein eigenen Server und muss durch euern Servernamen/IP ersetzt werden.

Nachtrag3
Vielleicht doch ein Tick zu früh gefreut.

Dies ist mein einfacher Versuchtsaufbau:

shell_command:
  start_nodered: ssh root@smarthomeserver.local 'docker start NodeRed'
  stop_nodered: ssh root@smarthomeserver.local 'docker stop NodeRed'

Leider wird der Befehl hier nicht korrekt ausgeführt. Hat jemand eine Idee warum?

Logger: homeassistant.components.shell_command
Source: /usr/src/homeassistant/homeassistant/components/shell_command/__init__.py:117
Integration: Shell Command (documentation, issues)
First occurred: 21:46:14 (1 occurrences)
Last logged: 21:46:14

Error running command: `ssh root@smarthomeserver.local 'docker stop NodeRed'`, return code: 255
NoneType: None

:crayon:by HarryP: Zusammenführung Mehrfachposting!

Wie führst du sh scripte aus? Mit open ist mir neu. Ich kenne nur die beiden varianten:

sh script.sh

oder

./script.sh

Aber hast ja jetzt eine anderen Lösung.

@Lindtbaer ich bin mittlerweile von Telnet weg und nutze SSH. In der Shell funktioniert der Befehl, als Dienst aber leider nicht.

shell_command:
  start_nodered: ssh -i /config/ssh/id_ed25519 -o StrictHostKeyChecking=no root@smarthomeserver.local "docker start NodeRed"
  stop_nodered: ssh -i /config/ssh/id_ed25519 -o StrictHostKeyChecking=no root@smarthomeserver.local "docker stop NodeRed"

Ja, das weiß ich. War aber eher so gemeint, dass du bei dem SH Script auch hättest bleiben können.

Versuch das mal:

shell_command:
  start_nodered: "ssh -i /config/ssh/id_ed25519 -o StrictHostKeyChecking=no root@smarthomeserver.local docker start NodeRed"
  stop_nodered: "ssh -i /config/ssh/id_ed25519 -o StrictHostKeyChecking=no root@smarthomeserver.local docker stop NodeRed"

Ich habe es nun hin bekommen. Mein Fehler war, den falschen Schlüssel kopiert zu haben.

So geht es richtig:

  1. In der HA Shell “ssh-keygen -t ed25519” eingeben
  2. Als Ziel der Datei “/config/ssh/id_ed25519”
  3. Jetzt den richtigen Schlüssel kopieren mit “ssh-copy-id -i /config/ssh/id_ed25519 root@smarthomeserver.local”
  4. Kennwort eingeben, fertig.

Ab jetzt kann ich mit z.b.:

ssh -i /config/ssh/id_ed25519 -o StrictHostKeyChecking=no root@smarthomeserver.local "docker start NodeRed"

Den NodeRed Docker Container auf meinen unRAID Server beenden.

Warum das ganze?
Ich möchte mit einen Fernbedienung die Windows VM auf meinen unRAID Server starten/beenden. MEGA :slight_smile: