Shell-Skripte / -Befehle per Tastenkombination starten
Hallo, ich würde gerne an meinem Linux-Router (ohne Monitor) analog zu [Strg]+[Alt]+[Entf] mit beliebigen Tastenkombinationen beliebige Shell-Skripte starten (z.B. Shutdown, Fetchmail, etc...), so dass man sich nicht jedes Mail mit SSH einloggen muss. Welche Möglichkeiten (Programme) gibt es? Die Tastenkombinationen sollten natürlich funktionieren, ohne dass ein Benutzer angemeldet ist (also bereits am Login Prompt). Ist das überhaupt möglich? ([Strg]+[Alt]+[Entf] in inittab funktioniert ja). Vielen Dank für Eure Hinweise. Gruß Micha
Hallo Michael, Michael Frank schrieb:
ich würde gerne an meinem Linux-Router (ohne Monitor) analog zu [Strg]+[Alt]+[Entf] mit beliebigen Tastenkombinationen beliebige Shell-Skripte starten (z.B. Shutdown, Fetchmail, etc...), so dass man sich nicht jedes Mail mit SSH einloggen muss.
Welche Möglichkeiten (Programme) gibt es?
Die Tastenkombinationen sollten natürlich funktionieren, ohne dass ein Benutzer angemeldet ist (also bereits am Login Prompt).
Ist das überhaupt möglich? ([Strg]+[Alt]+[Entf] in inittab funktioniert ja).
Init kann neben ctraltdel noch kbrequest [ALT]+[CursorUp] abfangen, statt /bin/echo kannst du da ja in /etc/inittab auch was anderes starten lassen: # Action on special keypress (ALT-UpArrow). kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work." Benutzerinteraktion wird da aber wohl nicht gehen. Evtl. reicht dir aber auch eine bestimmte Konsole für deinen Zweck. Dann startest du darauf eben keinen getty sondern ein anderes Programm, welches dir ein Menü zur Verfügung stellt. Gruß christian
Hallo Michael,
Michael Frank schrieb:
ich würde gerne an meinem Linux-Router (ohne Monitor) analog zu [Strg]+[Alt]+[Entf] mit beliebigen Tastenkombinationen beliebige Shell-Skripte starten (z.B. Shutdown, Fetchmail, etc...), so dass man sich nicht jedes Mail mit SSH einloggen muss.
Welche Möglichkeiten (Programme) gibt es?
Die Tastenkombinationen sollten natürlich funktionieren, ohne dass ein Benutzer angemeldet ist (also bereits am Login Prompt).
Ist das überhaupt möglich? ([Strg]+[Alt]+[Entf] in inittab funktioniert ja).
Init kann neben ctraltdel noch kbrequest [ALT]+[CursorUp] abfangen, statt /bin/echo kannst du da ja in /etc/inittab auch was anderes starten lassen:
# Action on special keypress (ALT-UpArrow). kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
Benutzerinteraktion wird da aber wohl nicht gehen.
Will ich gar nicht, denn: kein Monitor!!! Nochmal: Der PC läuft als Server/Router nur mit angeschl. Tastatur und ich würde halt gerne außer dem Reboot mit [Strg]+[Alt]+[Entf] auch noch andere Aktionen wie Shutdown o.ä. ausführen, ohne mich remote einloggen zu müssen. Gut, mit dem (ALT-UpArrow) ließe sich dann wohl wenigstens der Shutdown realisieren, oder?
Evtl. reicht dir aber auch eine bestimmte Konsole für deinen Zweck. Dann startest du darauf eben keinen getty sondern ein anderes Programm, welches dir ein Menü zur Verfügung stellt.
Ich habe nach dem Booten aber noch keine Konsole, dazu müsste ich mich ja einloggen, oder? Das mit dem "kein getty sondern ein anderes Programm starten" ist mir nicht klar. Ist das ein Ansatz? Kann man statt dem Login auf Konsole 1 ein Programm starten lassen, das Tastenkürzel annimmt und (am besten als root, wg. shutdown) Skripte startet? --- Frage: Wie bedient Ihr denn Eure Linux Server/Router? Etwa immer alles über Shell, auch für einen kurzen Reboot? --- SSH ist schon ne tolle Sache, aber z.B. für meine Freundin schon zu kompliziert und ich will ihr ja nicht root-Rechte geben fürn Shutdown... Aus diesem Grund habe ich eine kleine Win32-Delphi Anwendung geschrieben, die als Symbol in der Traybar von Windows per Mausklick Kommandos an ein kleines Server-Programm auf dem Linux-PC abschickt. Das Server-Programm führt je nach Kommando ein beliebiges Skript aus (Reboot, Shutdown, Fetchmail, etc...). Das funktioniert wunderbar, aber es muss halt dazu ein PC im LAN grade noch laufen. Wenns jemanden interessiert, ich schicks gerne per E-Mail. An dieser Stelle: An alle Paranoiker da draußen: Bitte jetzt keine Hinweise zum Thema Sicherheit! ;-) Ist mir schon selbst klar, dass das unsicher ist, aber man ist halt faul... Vielen Dank für Eure Antworten! Gruß Michael
On Son, 25 Aug 2002 at 13:34 (+0200), Michael Frank wrote: [...]
Wie bedient Ihr denn Eure Linux Server/Router? Etwa immer alles über Shell, auch für einen kurzen Reboot?
Ja, warum nicht? Meinen Server fahre ich alle Jubeljahre mal runter, da ist das ein vertretbarer Aufwand.
SSH ist schon ne tolle Sache, aber z.B. für meine Freundin schon zu kompliziert und ich will ihr ja nicht root-Rechte geben fürn Shutdown...
man sudo
Aus diesem Grund habe ich eine kleine Win32-Delphi Anwendung geschrieben, die als Symbol in der Traybar von Windows per Mausklick Kommandos an ein kleines Server-Programm auf dem Linux-PC abschickt. Das Server-Programm führt je nach Kommando ein beliebiges Skript aus (Reboot, Shutdown, Fetchmail, etc...). Das funktioniert wunderbar, aber es muss halt dazu ein PC im LAN grade noch laufen. Wenns jemanden interessiert, ich schicks gerne per E-Mail.
Ich würde mir gerne beide Teile (Delphi- und Serverprogramm) mal angucken. Jan
* Michael Frank schrieb am 25.Aug.2002:
Nochmal: Der PC läuft als Server/Router nur mit angeschl. Tastatur und ich würde halt gerne außer dem Reboot mit [Strg]+[Alt]+[Entf] auch noch andere Aktionen wie Shutdown o.ä. ausführen, ohne mich remote einloggen zu müssen.
Ich habe nach dem Booten aber noch keine Konsole, dazu müsste ich mich ja einloggen, oder?
Das mit dem "kein getty sondern ein anderes Programm starten" ist mir nicht klar.
Ist das ein Ansatz? Kann man statt dem Login auf Konsole 1 ein Programm starten lassen, das Tastenkürzel annimmt und (am besten als root, wg. shutdown) Skripte startet?
Mach das doch in der /etc/inittab. Normalerweise startet der Kernel als erstes und einziges Programm init. init schaut in der /etc/inittab nach, was es machen soll. Da steht dann z.B daß /etc/init.d/boot gestartet werden soll, oder /etc/init.d/rc, was wiederumt die initskripte startet. Aber auch die mingettys, die auf den einzelnen Konsolen lauschen. Die Syntax der /etc/inittab ist recht einfach, jeder Eintrag besteht aus vier Felder, die durch ein : voneinander getrennt sind. Im ersten Feld muß etwas stehen, daß einmalig ist, ansonsten ist es egal. Im zweiten Feld steht das Runlevel, für der der Eintrag gilt. Im dritten Feld stehen solche Sachen wie once, wait oder respawn, oder auch boot oder bootwait oder auch powerfail und andere. once bedeutet, daß wenn in einem der Runlevel gewechselt wird, das im zweiten Feld steht, dann wird der Befehl, der im vierten Feld steht ausgeführt. wait macht das gleiche, nur daß mit der Ausführung der nächsten Zeilen solange gewartet wird, bis die Ausführung beendet ist. respawn ist auch nicht viel anders, nur daß, sobald der Befehl beendet ist, wird er erneut gestartet. Das geht solange, bis zu einem anderen runlevel gewechselt wird. boot und bootwait sind wie once und wait, nur daß es nur beim booten ausgeführt wird, nicht aber bei einem normalen runlevelwechsel. powerfail wird, wie der Name sagt, ausgeführt, wenn die Stromzuführung ausfällt. Bzw. wenn sie wieder da ist. Im vierten Feld steht der Befehl. Natürlich muß er mit vollen Pfad angegeben werden. Hier könntest Du auch ein shellskript hinschreiben, daß alles macht, was Du willst. Bitte beachte, daß kein Pfad gesetzt ist, und auch kein Terminal zugeordnet. Alles muß umgelenkt werden, auch die Eingabe. (mit <) Interessant könnte für dich tleds sein, damit kanst Du eine gewisse Kontrolle mit den Tastatur LEDs machen.
Frage:
Wie bedient Ihr denn Eure Linux Server/Router? Etwa immer alles über Shell, auch für einen kurzen Reboot?
Wieso reboot? Ein Server läuft normalerweise Tage wenn nicht Jahrelang durch. Wenn man was an der Hardware machen muß, dann ist es meist sowieso besser ein Monitor für die Zeit anzuschließen. Ansonsten wird er mit ssh verwaltet.
An dieser Stelle: An alle Paranoiker da draußen: Bitte jetzt keine Hinweise zum Thema Sicherheit! ;-) Ist mir schon selbst klar, dass das unsicher ist, aber man ist halt faul...
Schlechte Einstellung. Allerding weiß ich nicht, ob es wirklich so unsicher ist. Wenn in dem Skript hart drin steht, daß Befehle nur von /dev/tty1 kommen, dann kann man von außen nicht viel machen, und solange kein Angreifer an die Tastatur kommt. Bernd -- Alle meine Signaturen sind rein zufällig und haben nichts mit dem Text oder dem Schreiber zu tun, dem ich antworte. Falls irgendwelche Unrichtigkeiten dabei sein sollten, so bedauere ich das. Es wäre nett, wenn Du mich benachrichtigen würdest. |Zufallssignatur 0
Moin, Michael Frank:
Wie bedient Ihr denn Eure Linux Server/Router? Etwa immer alles über Shell, auch für einen kurzen Reboot?
Für Kleinstkram über den Browser: http://meinrouter.local/shutdown http://meinrouter.local/reboot Alles CGIs. Kann man noch gegen Mißbrauch absichern, aber ich habe nicht so wirklich Panik davor, jemand könnte aus dem Netz meinen Rechner rebooten. Alles weitere über ssh. Nach meinem Verständnis ist es dafür da, wozu habe ich telnet rausgeschmissen, wenn ich auf der anderen Seite wieder Bastellöcher aufmache? Sag ich mal so. ;-) Gruß, Ratti
Am Son, 2002-08-25 um 17.55 schrieb Joerg Rossdeutscher:
Moin,
Michael Frank:
Wie bedient Ihr denn Eure Linux Server/Router? Etwa immer alles über Shell, auch für einen kurzen Reboot?
ssh root@server reboot was meinst du mit "immer alles über Shell"?, ich starte X nur, wenn ich es wirklich brauche - was Administration betrifft nur Shell.
Für Kleinstkram über den Browser:
http://meinrouter.local/shutdown http://meinrouter.local/reboot
Alles CGIs. Kann man noch gegen Mißbrauch absichern, aber ich habe nicht so wirklich Panik davor, jemand könnte aus dem Netz meinen Rechner rebooten.
über browser?, wie wärs mit (ISDN)Telefon - ich hab da reboot und rcsmpppd restart (wer braucht schon 10MSN's pro Anschluß zumm Telefonieren :)) tschau fisch
From: Andre Fischer Am Son, 2002-08-25 um 17.55 schrieb Joerg Rossdeutscher:
Moin,
Michael Frank:
Wie bedient Ihr denn Eure Linux Server/Router? Etwa immer alles über Shell, auch für einen kurzen Reboot?
ssh root@server reboot
was meinst du mit "immer alles über Shell"?, ich starte X nur, wenn ich es wirklich brauche - was Administration betrifft nur Shell.
Für Kleinstkram über den Browser:
http://meinrouter.local/shutdown http://meinrouter.local/reboot
Alles CGIs. Kann man noch gegen Mißbrauch absichern, aber ich habe nicht so wirklich Panik davor, jemand könnte aus dem Netz meinen Rechner rebooten.
über browser?, wie wärs mit (ISDN)Telefon - ich hab da reboot und rcsmpppd restart (wer braucht schon 10MSN's pro Anschluß zumm Telefonieren :))
Habe ich mir auch schon überlegt! Aber die Vorstellung war dann doch etwas komisch: "Ja, Schatz! Ich komme gleich ins Bett! Muss nur noch kurz meinen Router (unterm Tisch) anrufen, damit er runterfährt!" :-)) Immerhin wäre das mit dem drahtlosen Telefon dann auch vom Bett aus möglich... Es wird langsam spät... ;-) Michael
Michael Frank:
Wie bedient Ihr denn Eure Linux Server/Router? Etwa immer alles über Shell, auch für einen kurzen Reboot?
Für Kleinstkram über den Browser:
http://meinrouter.local/shutdown http://meinrouter.local/reboot
Alles CGIs. Kann man noch gegen Mißbrauch absichern, aber ich habe nicht so wirklich Panik davor, jemand könnte aus dem Netz meinen Rechner rebooten.
Kannst Du die CGIs hier mal posten oder mir sonstwie zukommen lassen (PM)? Wäre sehr interessiert daran. Danke! Michael
Ratti:
Für Kleinstkram über den Browser:
http://meinrouter.local/shutdown http://meinrouter.local/reboot
Alles CGIs. Kann man noch gegen Mißbrauch absichern, aber ich habe nicht so wirklich Panik davor, jemand könnte aus dem Netz meinen Rechner rebooten.
Michael Frank
Kannst Du die CGIs hier mal posten oder mir sonstwie zukommen lassen (PM)? Wäre sehr interessiert daran.
Die CGIs selbst sind nicht so sehr das Problem. Zum Beispiel /usr/local/apache/cgi-bin/reboot: #!/bin/sh sudo /sbin/shutdown -r now Das schmeisst übrigens 'ne Fehlermeldung im Browser, funktioniert aber trotzdem. Hier fehlt nämlich der HTML-Header, aber das ist mir sowas von egal, die Kiste ist ja sowieso schon auf dem Weg zum reboot. Das eigentliche Problem ist, daß der Apache-User "wwwrun" nicht das recht hat, einen reboot auszuführen. Deswegen wird das ganze über sudo gestartet, damit apache rootrechte erlangt. Die Datei, um das zu konfigurieren, verhält sich ähnlich wie die bearbeitung von cronjobs, das heisst: Man bearbeitet sie nicht "direkt", sondrn über ein spezielles Tool. Äquivalent zu crontab- e ist das hier "visudo". Tipp das ein. Das ist meine Konfig: # sudoers file. # # This file MUST be edited with the 'visudo' command as root. # # See the sudoers man page for the details on how to write a sudoers file. # # Zielbenutzer Alias Spezifikation Runas_Alias RSHUTDOWN=root # Host alias specification Host_Alias HSHUTDOWN=192.168.0.0/255.255.255.0 # User alias specification User_Alias USHUTDOWN=nobody # Cmnd alias specification Cmnd_Alias CSHUTDOWN=/sbin/shutdown -h now,/sbin/shutdown -r now # User privilege specification root ALL=(ALL) ALL USHUTDOWN HSHUTDOWN = NOPASSWD: CSHUTDOWN Damit werdne die Befehle /sbin/shutdown -h now und sbin/shutdown -r now freigeschaltet. sudo ist sehr empfindlich in dieser hinsicht, wenn dort steht "/sbin/shutdown", dann muss das GENAU so eingegeben werden, und nicht etwa "shutdown", auch wenn dann das shutdown in /sbin aufgerufen wird. Ich erinnere mich dunkel, daß du einmal als root auf den ausführenden user CUen solltest und den Befehl eingeben, weil dann einmalig ein Belehrungssprüchlein erscheint, welches der Apache gar nicht mag. Ach, und du mußt wohl Pfade und User anpassen. Mein Apache ist selbstgestrickt. Deiner liegt wohl nicht in /usr/LOCAL, und der User, unter dem Apache läuft, ist wohl auch nicht "nobody". Ach, und nochwas: Ich bin kein Security-Experte, und der Rechner, auf dem das bei mir passiert, ist ein von außen nicht erreichbarer CD-Brenn-Rechner. Wenn dir an Systemsicherheit was liegt, betrachte es bitte als Vorlage, nicht als 1:1-Anleitung, ich lege dafür nämlich nicht meine Hand ins Feuer. :-) Gruß, Ratti
Hi On Sunday 25 August 2002 13:34, Michael Frank wrote:
Nochmal: Der PC läuft als Server/Router nur mit angeschl. Tastatur und ich würde halt gerne außer dem Reboot mit [Strg]+[Alt]+[Entf] auch noch andere Aktionen wie Shutdown o.ä. ausführen, ohne mich remote einloggen zu müssen.
Kleiner Tip am Rande. Man kann auch (unter 7.3 war das IIRC in rc.config) einstellen, ob er bei <ctrl>+<alt>+<delete> runterfährt ODER rebootet. Ich nehme mal an das löst dein Problem bereits völlig. mfg Axel
On Sun, Aug 25, 2002 at 01:08:37PM +0200, Christian Schult wrote:
Evtl. reicht dir aber auch eine bestimmte Konsole für deinen Zweck. Dann startest du darauf eben keinen getty sondern ein anderes Programm, welches dir ein Menü zur Verfügung stellt.
Gibt es vielleicht eine Möglichkeit an ein bestimmtes Programm, xterm,... eine Tastenkombination zu schicken als wäre sie mit der Tastatur eingegeben worden? (Das Frontend läuft z. B. auf einem anderen Display wo ich gerade nicht hin kann.) mfg Martin Neuditschko
participants (8)
-
Andre Fischer
-
Axel Heinrici
-
B.Brodesser@t-online.de
-
Christian Schult
-
Jan.Trippler@t-online.de
-
Joerg Rossdeutscher
-
Martin Neuditschko
-
Michael Frank