FritzBox von einer anderen FritzBox aus neu starten über Befehlszeile

blacksun

Mitglied
Mitglied seit
10 Jul 2005
Beiträge
610
Punkte für Reaktionen
1
Punkte
18
Hallo,

ich bin auf der Suche nach einer Möglichkeit, wie ich von meiner FritzBox meine andere FritzBox neu starten kann.
Das ganze soll über einen Befehl funktionieren, den ich über einen Anruf durch den Callmonitor auslösen kann.

Sprich ich rufe auf einer bestimmten Rufnummer an, und dann wird die zweite FritzBox neu gestartet.
Die FB, die neu gestartet werden soll, hat natürlich ein Passwort. Desweiteren befindet sich die orginale FW auf der Box und das sollte nach Möglichkeit auch so bleiben.

Wie könnte ich mein Vorhaben am besten umsetzen?
 
Zuletzt bearbeitet:
SSH Login über Key und remote Befehl ausführen. Genauere Infos müsste ich erst suchen.

MfG Oliver
 
Eine Alternative zu SSH wäre auch die Nano-Shell, sofern die Sicherheitsrisiken kein Problem für Dich darstellen.
 
Wenn die Original-FW drauf bleiben soll, kannst Du vielleicht auch per wget über das Webinterface den Reboot ausführen. Da musst Du aber mal schauen, welche URL da aufzurufen ist.
 
Hallo zusammen,

das Problem an dem ganzen wird wohl sein, dass ich nur einen Befehl ausführen kann.
Und das zweite Problem ist, dass zuerst ein Login erfolgen muss und in der dann eröffneten Sitzung Befehle ausgeführt werden müssen.

Ich hatte ja geschrieben, dass das ganze über den Callmonitor realisiert werden soll.
Sprich die zweite FritzBox und deren SIP-Accounts werden einzig und allein für solche Zwecke genutzt. Sprich bis zu 10 Accounts mit einer Rufnummer sind in der FB hinterlegt, wodurch ich pro Rufnummer einen Befehl ausführen lasse.

z.B.:
- es wird auf der Rufnummer des 1. Account angerufen: WOL vom PC
- es wird auf der Rufnummer des 2. Account angerufen: FritzBox 1 wird neu gestartet
- es wird auf der Rufnummer des 3. Account angerufen: FritzBox 2 wird neu gestartet
...

pro Ereignis (also ein Anruf auf einer bestimmten Rufnummer) kann nur eine Aktion (also ein Befehl an der Konsole) ausgeführt werden.
WOL ist kein Problem (mit ether-wake oder wol) und auch nicht der Neustart der FB, auf der der Callmonitor läuft (mit reboot-Befehl). Aber wie könnte ich die andere FB neu starten?

Da die FritzBoxen immer passwortgeschützt sind, brauche ich immer zwei Befehle. Einmal die Anmeldung (egal ob über die Weboberfläche mit z.B. wget oder curl, oder telnet / SSH an der Konsole) und dann der eigentlich Aufruf.

Zur Not könnte ich ein Skript erstellen und dieses mittels Freetz in das Image einbauen lassen.

Aber wie erstellt man so ein Skript, das sich zuerst einloggt und dann innerhalb der Sitzung Befehle ausführt?
Sprich z.B. der Login Telnet und dann der reboot-Befehl, der nach dem Login in Telnet am Telnet-Promt ausgeführt wird.

Auf meiner FB, von der aus die Befehle ausgeführt werden sollen, gibt es
SSH-Client und Server
Telnet-Client
Rudi-Shell

Auf der Box, die neu gestartet werden soll, ist nur die orginale FW von AVM drauf. Und das soll wiegesagt auch so bleiben.
 
Zuletzt bearbeitet:
Was sind es für Boxen 1 und 2? Wenn sie VOIP-fähig wären, würde ich dort direkt deine SIP-Accounts eintragen. Der Aufwand wäre etwas weniger, meiner Meinung nach. Schildere am besten dein Problem etwas ausführlicher. Vielleicht gibt es da auch weitere Ideen.

MfG
 
Die Steuerbox ist eine FritzBoxFon (mit Freetz-Image darauf),die andere ist eine 7050. Beide sind also VoIP-fähig. Aber wie kann das weiterhelfen?

Wiegesagt oberstes Ziel ist, dass die 7050 unangetastet bleibt, was die FW angeht. Genau aus diesem Grund habe ich mir die FBF gekauft, so dass ich eine im Orginalzustand habe und mit der anderen herumexperimentieren kann.

Du willst wissen, warum ich die 7050 neu starten möchte?
Ganz einfach. Die Box ist die zentrale Telefonanlage und auch der zentrale Router ins Internet. Internet habe ich über Kabel, sprich die 7050 ist bei mir ein reiner Router. Nun verliert die 7050 doch ab und an mal die Verbindung in's Internet, was sich leider nur durch einen Neustart der 7050 beheben lässt.

Nun bin ich demnächst für mehrere Wochen beruflich unterwegs und meine Familie hat von den Gerätschaften wie Router, Kabelmodem usw. überhaupt keine Ahnung.
Folglich muss ich auch von unterwegs einmal die 7050 neu starten können, um die Internetverbindung neu aufzubauen.

Jetzt fragst Du Dich, wie ich auf einer VoIp-Nummer anrufen will, um damit mittels Callmonitor einen Reboot der 7050 zu veranlassen. Dazu hat die Bastel-FBF ein GSM-Gateway. Sprich somit kann ich über einen Anruf auf das GSM-Gateway beim Callmonitor eine Aktion auslösen. Eben den Neustart der 7050.

Da meine Frau sich immer recht schnell beklagt, wenn mal das Telefon und Internet nicht geht, möchte ich gleich vorbeugen. Um zu überwachen, ob die Intertverbindung noch funktioniert, habe ich über einen Dienst eine Möglichkeit, dass ich sofort eine Email (lasse ich mir auf's Handy schicken) erhalte, wenn die Inetverbindung nicht mehr besteht. Das ist dann das Signal, mal kurz auf der Handynummer des GSM-Gateways anzurufen und schwubs macht die 7050 einen Reboot und keiner der Daheimgebliebenen hat was bemerkt.


So, das war nun die ausführliche Erklärung, warum die 7050 neu gestartet werden soll. Aber ausgelöst werden soll das ganze von der Bastel-FBF aus. Die wurde u.a. für solche "Service-Zwecke" angeschafft.
 
den Telnet-Client, der im Linux für die FritzBoxen dabei ist, wird man höchst wahrscheinlich nicht skripten können vermute ich mal.
Aber das müsste man doch was mit netcat machen können, oder?
 
Die einfache Möglichkeit wäre, der Frau zu sagen ,welchen Stecker sie wie lange ziehen müsste, um das Ganze zu Resetten ;)
 
in:request ^03012345678$ ^0891234567$ reboot


auslösenummer anrufnummer

fertig

in lisseners callmonitor

viel spass damit
 
Wie wäre es mit dem kleinen Programm "empty", es ist ein "expect"-Clone und ist im Freetz unter "Package selection -> Testing" zu finden. Ich habe es zwar noch nicht für die Fritzbox kompiliert, aber unter einer sh4-Architektur habe ich eine Binary von nur 24 kb.
Weitere Informationen, wie man per Script eine Remote-Telnet-Session öffnet und irgendwelche Befehle ausführt findest Du unter hier.

Gruß
 
@Silent-Tears
genau darum geht es, dass meine Frau genau das nicht tun muss, weil es trotz kleinem Aufwand zu großem Gemecker führt

@ichego1
so funktioniert das ganze, wenn ich die box starten will, auf dem der callmonitor läuft.
Ich will aber von der Box mit dem Callmonitor eine andere Box neu starten.

@capt_bluebaer
ja, aber 24kb sind auch schon groß.

meine FritzBox hat nur noch 12kb im Image frei. Ihr müsst bedenken, dass die FritzBoxFon einer der ersten Boxen war. Dementsprechend passt da nicht viel in Speicher rein.

Und da nc schon im Image drinn ist, würde ich natürlich lieber das vorhandene nutzen anstatt gleich auf externe tools zurückzugreifen.


@all
Ich habe nun schon mehrfach gelesen, dass das so funktionieren soll:

Code:
nc 192.168.178.1:23 < befehle

In der Datei befehle steht
- in der ersten Zeile das Passwort für den Telnetzugriff
- in der zweiten Zeile reboot für das auslösen des neustarts.

Das ganze will aber nicht. Wahrscheinlich stimmt nur eine Kleinigkeit nicht am Aufruf von nc. Wer weiß, was ich falsch mache?
 
Zuletzt bearbeitet:
Stecker ziehen wäre echt die beste Lösung. Ich weiß nicht welche Erfahrungen du mit deinen 7050 hast, meine 7050 waren immer "eingefroren". Die waren allerdings gemodet. "Einfrieren" hieß, dass man nirgendswie auf die Box kam. Ich verstehe aber nicht, warum deine 7050 mit Originalfirmware einfrieren (oder was da auch immer passiert). Die letzte Firmware ist eigentlich relativ stabil, wenn man auf die Box nicht allzuviel Extras macht.

MfG

Edit: sind die beiden 7050 wirklich so jungfräulich? Hast du schon in debug.cfg nachgeschaut?

Edit2: Uptime einer meinen letzten 7050:
Code:
22:32:36 up 101 days, 11:59, load average: 0.00, 0.00, 0.00
Übrigens mit downloader und anderen Sachen voll belastet. Und die läuft in einem Geschäft, wo pro Tag wenigstens 30-50 Anrufe passieren, ISDN usw.
 
Zuletzt bearbeitet:
@hermann72pb

das mit stecker ziehen ist die bisherige Lösung. da das immer zu Diskussionen führt, muss was anderes her.
Die 7050 hängt sich auch nicht auf. Ich tippe vielmehr darauf, dass die die 7050, die an einem Kabelmodem als DHCP-Client fungiert, manchmal vergisst, die Lease zu verlängern. Und wenn die Lease (die beträgt nur 24 Stunden) nicht verlängert wird, ist eben irgendwann die Internetverbindung weg. Ist zwar nur eine Vermutung, aber so könnte ich mir das erklären.

@all
weiß denn niemand, wie das mit den Telnet-Skripten mit NC funktioniert?
NC soll doch das "Schweizer-Taschenmesser" sein. So kompliziert kann das doch nicht sein, sich damit über Telnet auf einen anderen Rechner per Telnet zu verbinden und dann dort den reboot-Befehl auszulösen


@
 
In der Datei befehle steht
- in der ersten Zeile das Passwort für den Telnetzugriff
- in der zweiten Zeile reboot für das auslösen des neustarts.

Das ganze will aber nicht. Wahrscheinlich stimmt nur eine Kleinigkeit nicht am Aufruf von nc. Wer weiß, was ich falsch mache?

Schau Dir mal vom PC aus mit tcpdump oder einem ähnlichen Programm den genauen Telnet-Datenstrom an und erstelle dann eine Datei mit genau dem Inhalt für netcat.

Zum einen werden am Anfang der Verbindung diverse Telnet-Optionen ausgehandelt, zum anderen sie auch die Zeilenenden anders.
 
ja, aber 24kb sind auch schon groß.

meine FritzBox hat nur noch 12kb im Image frei. Ihr müsst bedenken, dass die FritzBoxFon einer der ersten Boxen war. Dementsprechend passt da nicht viel in Speicher rein.

Kannst Du Dir "emtpy" nicht von der 7050 oder woanders (USB?) per wget holen? Da kommst Du ja noch 'rauf auch wenn die Internet-Verbindung unterbrochen ist.
Ich kann Dir dieses Programm nur wärmstens empfehlen, ich habe mit "nc" & co. schon viele Abende verbracht ohne brauchbares Ergebnis, mit telnet ist da sonst nichts zu machen.

Gruß
 
Zuletzt bearbeitet von einem Moderator:
also ich habe so ein ähnliches "problem" gehabt. einer der callmonitor listener führt das folgende skript aus, welches meinen server startet oder aber auch beendet. der letztere befehl ist wahrscheinlich interessanter für dich, da er genau das beinhalgtet, was du brauchst, login und ausführen von einem befehl. einziges problem ist, dass dies nur geht, wenn vorher der public SSH key der fritz auf den server/anderen rechner übertragen wurde. ich habe ein FBFW 7050 mit freetz, welches public/private keys automatisch erstellt. den ort des public keys muss man dem client auf der fritz noch mitteilen.
Code:
#!/bin/sh

ping 192.168.0.42 -c1
if [ $? -ne 0 ]
    then 
        ether-wake -i eth0 00:11:22:33:44:55
else
        ssh -i /tmp/flash/rsa_host_key -y [email protected] 'shutdown -hP now'    
fi
exit $?
 
Wie wäre es mit dem kleinen Programm "empty", es ist ein "expect"-Clone und ist im Freetz unter "Package selection -> Testing" zu finden...
Weitere Informationen, wie man per Script eine Remote-Telnet-Session öffnet und irgendwelche Befehle ausführt findest Du unter hier.

so, habe nun doch noch etwas Platz freigemacht für expect, sprich ist jetzt im Image mit eingebaut.

wie funktioniert das mit expect?

so?

Code:
#!/bin/sh
empty -f -i in -o out telnet foo.bar.com
empty -w -i out -o in "assword:" "TopSecret\n"
empty -s -o in reboot

warum fehlt eigentlich immer der erste Buchstabebei Passwort und Login?
und was macht das "\n"?
 
Versuch's hiermit:
Code:
#!/bin/sh
telnet="telnet"     		# (/full/path/to/)telnet
target="<IP der 7050>"		# target telnet-host
login="luser" 			# username (Change it!)
password="TopSecret"		# password (Change it!)
remote_cmd="reboot"            # remote command (e.g. shutdown -h now)
fifo_in="/var/tmp/empty.in"    # input fifo
fifo_out="/var/tmp/empty.out" # output
log="/var/tmp/empty.log"       # log
telnet_cmd="$telnet $target"

rm -f $tmp
empty -f -i $fifo_in -o $fifo_out -L $log $telnet_cmd
if [ $? = 0 ]; then
    if [ -w $fifo_in -a -r $fifo_out ]; then
        empty -w -i $fifo_out -o $fifo_in -t 5 ogin: "$login\n" 
	# echo Keyphrase matches : $?
	empty -w -i $fifo_out -o $fifo_in -t 5 assword: "$password\n"
	echo Keyphrase matches : $?
	empty -s -o $fifo_in "$remote_cmd\n"
        sleep 5
	empty -s -o $fifo_in 'exit\n'
	rm -f $tmp
    else
	echo "Error: Can't find I/O fifos!"
	    return 1
    fi
else
    echo "Error: Can't start empty in daemon mode"
        return 1
fi
Ist aus den Sourcen, habe es ein wenig abgewandelt. Folgende Variablen mußt Du an Deine Umgebung anpassen: target, login, password und remote_cmd. In /var/tmp/empty.log kannst Du nachlesen, ob und wie es abgelaufen ist.
Um auf Deine Fragen zurückzukommen: Der erste Buchstabe der Suchmuster ( ogin:, assword: ) wird bewußt weggelassen, um eine Inkompabilität zwischen verschiedenen Telnet-Server zu vermeiden, die sich - je nach Lust und Laune - mit "Login:" oder "login:" bzw. "Password:" oder "password:" melden, empty unterscheidet Groß- und Kleinschreibung.
Und das "\n" steht für einen Zeilenvorschub/Wagenrücklauf (Enter), den empty nach Senden des Antwortstrings anhängen soll.
Das "-t 5" läßt empty die definierte Zeit von 5 Sekunden auf das Suchmuster warten, danach bricht es ab und der nächste Befehl wird ausgeführt. Damit beendet sich das Script sicher.

Gruß
 
Mehr Informationen zu FBF + GSM-Gateway + e-Mail-Dienst

Hi blacksun,
... Dazu hat die Bastel-FBF ein GSM-Gateway. Sprich somit kann ich über einen Anruf auf das GSM-Gateway beim Callmonitor eine Aktion auslösen.

... einen Dienst eine Möglichkeit, dass ich sofort eine Email (lasse ich mir auf's Handy schicken) erhalte, wenn die Inetverbindung nicht mehr besteht.
Könntest du über die beiden Sachen mehr Informationen (PDF, Links, Datenblätter, Bilder, usw.) zur Verfügung stellen bitte?

Gruß.
 
Kostenlos!

Statistik des Forums

Themen
248,887
Beiträge
2,304,080
Mitglieder
378,569
Neuestes Mitglied
Yannick100