ubuntuusers.de

Für diese Funktion musst du eingeloggt sein.

Telnet Script (2)

Status: Gelöst | Ubuntu-Version: Kubuntu 11.10 (Oneiric Ocelot)
Antworten |

Axel

Avatar von Axel

Anmeldungsdatum:
23. August 2006

Beiträge: 541

Hallo,

um dem Music Player Deamon auf der Dreambox per Telnet neuzustarten, wenn dieser sich aufhängt, will ich ein Skript schreiben. Leider sind die Skripte die ich bisher gefunden habe noch erfolglos. Am weitesten bin ich mit der Variante von http://forum.ubuntuusers.de/topic/telnet-script-2/?highlight=telnet+bash hier gekommen. Dennoch funktioniert es noch nicht und ich habe keine Ideen mehr woran es liegt.

Der "normale" Vorgang sieht so aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
axel@axel-SR70S-SR71S:~$ telnet 192.168.1.3
Trying 192.168.1.3...
Connected to 192.168.1.3.
Escape character is '^]'.

OpenDreambox 1.6.0 dm800se

dm800se login: root
root@dm800se:~# /etc/init.d/mpd restart
Restarting music player daemon: mpdstopped /usr/bin/mpd (pid 9786)
.
root@dm800se:~# exit
Connection closed by foreign host.

mein Skript sieht so aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

/usr/bin/expect - << EndMark
spawn telnet 192.168.1.3
expect "login: "
send "root\r"
expect "~# "
send "/etc/init.d/mpd restart\r"

EndMark

beim ausführen des Skripts sieht es so aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
axel@axel-SR70S-SR71S:~$ ./restart_mpd.sh
spawn telnet 192.168.1.3
Trying 192.168.1.3...
Connected to 192.168.1.3.
Escape character is '^]'.

OpenDreambox 1.6.0 dm800se

dm800se login: root
root@dm800se:~# axel@axel-SR70S-SR71S:~$ 

Wieso wird die Telnet verbindung beendet, obwohl der Login scheinbar erfolgreich war?

Gruß Axel

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

Kann das Ding denn kein SSH?

Axel

(Themenstarter)
Avatar von Axel

Anmeldungsdatum:
23. August 2006

Beiträge: 541

Es kann angeblich auch SSH, habe ich aber noch nie benutzt, da alles im privaten Netzwerk ist. Bringt SSH Vorteile für die Shell-Programmierung?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

Naja, mit SSH geht sowas ganz einfach:

ssh root@192.168.1.3 '/etc/init.d/mpd restart'

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2505

Servus,

bin auch für SSH.

Aber falls du es am Ende doch mit Telnet machen willst: Du musst nach dem „send“ noch einmal auf den Prompt warten. Andernfalls schickst du zwar den String weg, aber danach beenden sich expect und telnet sofort, weil dann dein Skript zuende ist.

Manuell machst du das ja auch so: Du loggst dich ein, startest MPD neu und wartest dann noch einmal auf den nächsten Prompt, bevor du „exit“ eingibst.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash

/usr/bin/expect - << EndMark
spawn telnet 192.168.1.3
expect "login: "
send "root\r"
expect "~# "
send "/etc/init.d/mpd restart\r"
expect "~# "

EndMark

Axel

(Themenstarter)
Avatar von Axel

Anmeldungsdatum:
23. August 2006

Beiträge: 541

Besten Dank, beide Lösungen funktionieren. Wobei ich bei

1
2
3
4
axel@axel-SR70S-SR71S:~$ ssh root@192.168.1.3 '/etc/init.d/mpd restart'
root@192.168.1.3's password: 
Restarting music player daemon: mpdstopped /usr/bin/mpd (pid 12316)
.

noch manuell ein Passwort eingeben muss. Gibt es eine möglichkeit das Passwort in den ssh-Befehl einzubringen?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

Axel schrieb:

Gibt es eine möglichkeit das Passwort in den ssh-Befehl einzubringen?

Noch besser: Authentifizierung über Public Keys: - wenn du sowas für deinen Benutzer eingerichtet hast, kann sich das Skript unter Nutzung dieses Keys am Server anmelden und du musst kein Klartext-Passwort auf dem Rechner speichern.

wilblock

Anmeldungsdatum:
3. April 2012

Beiträge: Zähle...

Hallo Axel,

ich hab das im Script so gelöst:

(sleep 3; echo "root"; sleep 3; echo "/etc/init.d/mpd restart"; sleep 6; echo "exit") | telnet 192.168.1.3

Funktioniert super.

Gruß Wilblock

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2505

@wilblock: Aber wehe, deine geschätzten Wartezeiten stimmen mal nicht. Dann geht im dümmsten Fall gar nichts mehr. Das von Axel genommene expect ist für sowas durchaus der richtige Ansatz.

Antworten |