Einschlafen und Aufwecken

Permalink

Wie bereits früher berichtet, schalte ich meinen Server in den Nachtzeiten ab. Normalerweise schlafe ich Nachts, daher habe ich auch keine Verwendung für den Server. “Normalerweise” impliziert natürlich auch, dass es Ausnahmen gibt. Daher habe ich mir überlegt, wie ich den Rechner gezielt an und abschalten kann, ohne jedes mal in den Keller gehen zu müssen. Herausgekommen ist eine Kombination aus Wake on LAN und SSH.

Vorbereitungen

Sowohl das Aufwecken mittels WoL als auch das Herunterfahren über SSH bedarf ein paar Vorbereitungen auf dem Server. Da mein Server unter Debian 6.0 läuft, beschreibe ich die nötigen Schritte für dieses Betriebssystem.

Wake on LAN

Wake on LAN ist eine Technik, die es ermöglicht, einen Computer über das Netzwerk anzuschalten. Dazu müssen natürlich sowohl die Netzwerkkarte als auch das BIOS entsprechende Funktionen unterstützen. Bei heutigen Computern ist das aber in der Regel kein Problem.

Um WoL zu ermöglichen, müssen im BIOS und im Betriebssystem die jeweiligen Einstellungen vorgenommen werden. Bei halbwegs aktuellen Computern wird das Wecksignal über einen speziellen PCI-Anschluss gesendet. Das heißt, eine Netzwerkkarte die einen entsprechenden Befehl erhält, sendet diesen über den PCI-Bus an das System. Dort wird es durch das BIOS verarbeitet und der Computer hochgefahren. Damit das auch wirklich passiert, muss dem BIOS aber auch erlaubt sein, dieses Signal zu verarbeiten. Dazu gibt es meist eine Einstellung wie PowerOn by PCI Card, die aktiviert sein muss.

Damit die Netzwerkkarte den Befehl überhaupt registrieren und weitergeben kann, muss sie entsprechend Konfiguriert sein. Für die Konfiguration der Netzwerkkarte ist aber nicht mehr das BIOS zuständig, sondern das Betriebssystem. Mittels des Programms ethtool kann die entsprechende Konfiguration vorgenommen werden. Dazu muss man das gleichnamige Paket installieren:

aptitude install ethtool

Danach kann beispielsweise das erste Netzwerkinterface mittels ethtool -s eth0 wol g in den “Lauschmodus” versetzt werden.

Damit das Ganze zukünftig automatisch passiert, bietet es sich an den Befehl in der Konfigurationsdatei des Netzwerkes /etc/network/interfaces unterzubringen. Dazu muss man für jedes Interface zwei Zeilen post-up und post-down ergänzen. Dazu hier ein Beispiel:

iface eth0 inet static
    address 192.0.2.2  
    netmask 255.255.255.0 
    gateway 192.0.2.1
    post-up /sbin/ethtool -s $IFACE wol g
    post-down /sbin/ethtool -s $IFACE wol g

Die beschriebenen Schritte kann man auch auf englisch im Debian Wiki nachlesen. Dort gibt es auch noch mehr Informationen die eventuell nützlich sind, wenn man auf Probleme trifft.

Shutdown

Für das Runterfahren aus der Ferne setzt ich eine funktionierende SSH Verbindung voraus. Über diese soll der Befehl shutdown auf dem Server ausgegeben werden. Da ich nicht empfehle sich mit dem Benutzer root auf einem Server einzuloggen, fangen die Probleme schon an: Der Befehl shutdown kann nur von root oder über sudo ausgeführt werden. Es gilt also die Konfiguration von sudu anzupassen.

Diese liegt unter /etc/sudoers, kann aber nicht direkt bearbeitet werden, da sie vor Manipulationen geschützt ist. Daher muss man mittels visudo auf die Konfiguration zugreifen und die gewünschten Änderungen vornehmen. Dabei sollte man sich nicht irritieren lassen, dass man scheinbar eine Datei sudoers.tmp bearbeitet. Beim Speichern landet nämlich alles wieder an der richtigen Stelle.

Als erstes legt man sich einen User-Alias an. Unter diesem Alias fasst man alle Benutzer zusammen für die man Rechte vergeben will:

SHUTDOWNUSERS = jdoe

Ein zweiter Eintrag definiert die Programme, die ausgeführt werden sollen:

Cmnd_Alias      SHUTDOWN = /sbin/shutdown, /sbin/reboot, /sbin/halt

Im dritten Schritt kommen die beide Aliase zusammen:

SHUTDOWNUSERS ALL=(ALL) NOPASSWD: SHUTDOWN

Hierdurch wird für alle User hinter dem Alias SHUTDOWNUSER das Recht gewährt die Programme, die durch SHUTDOWN deklariert werden, mittels sudo auszuführen. Zusätzlich wird durch NOPASSWD die Abfrage des Passworts unterbunden. Nach dem Speichern sind die Vorbereitungen damit abgeschlossen.

Ins Bett bringen

Nachdem der Server nun präpariert ist, stellt sich noch die Frage nach dem Wie: Wie geht das mit …

Linux

Unter Linux, hier am Beispiel von Ubuntu, reicht eine einzelne Zeile um eine SSH-Verbindung aufzubauen und ein Kommando zu übermitteln:

ssh -i .ssh/id_rsa_2048 192.0.2.2 sudo /sbin/shutdown -h now

Mit dem Parameter -i wird die Schlüsseldatei übergeben mit der die Authentifizierung erfolgen soll. Danach folgt die IP-Adresse des Servers. Der komplette letzte Teil ist der Befehl der über die Verbindung ausgeführt wird. Entscheidend ist hier das vorangestellte sudo nicht zu vergessen, um die nötigen Rechte auf dem Server zu erlangen.

Windows

Wie oben beschrieben soll der Computer mittels einer SSH-Verbindung ausgeschaltet werden. Der übliche Client unter Windows ist dabei Putty. Wie man eine Verbindung über Putty aufbaut, will ich hier nicht weiter erläutern. Dazu gibt es eine gute Anleitung, die auch erklärt wie man ein gewünschtes Kommando automatisch ausführt und eine Verknüpfung anlegt, um ein Profil komfortabel ausführen zu können.

Aufwecken

Das Aufwecken läuft auf den betrachteten Betriebssystemen grundsätzlich gleich ab, nur die Software ist unterschiedlich. Dabei sollte man sich nicht davor scheuen ein wenig an den Parametern herumzuspielen, wenn es nicht gleich funktioniert – Die Technik hat halt so ihre Tücken.

Linux

wakeonlan ist das Mittel der Wahl für Linux. Nach dem man das Paket mittels apg-get install wakeonlan installiert hat, muss man nur noch die MAC-Adresse des Servers raus suchen und schon geht es los:

wakeonlan aa-bb-cc-dd-ee-ff

Die MAC-Adresse lässt sich zum Beispiel über ifconfig herausfinden. Dort gehört sie zur Standardausgabe für jedes Netzwerkinterface.

Windows

Unter Windows verwende ich ein kleines Kommandozeilentool namens WakeUP!. Dies tut nichts weiter als den Weckruf zu verschicken. Ein kurzer Befehl reicht damit aus um den gewünschten Computer aus dem Schlummer zu reißen:

wake aa-bb-cc-dd-ee-ff 192.0.2.255

Hierdurch wird der Computer mit der MAC-Adresse aa-bb-cc-dd-ee-ff aufgeweckt. Das Paket wird dabei mittels Broadcast an das Netzwerkes 192.0.2.0 gesendet.

Android

Für Android gibt es einige Apps die WoL-Packete verschicken können. Eine davon ist Wake On Lan. Mit dieser App kann man Profile anlegen und diese mit einem Button auf dem Startscreen aufrufen.

Beim Einstellen eines Profils musste ich nur darauf achten die Option für Broadcast-Pakete zu wählen und die IP-Adresse anzugeben. Ohne hat es nicht funktioniert. Generell scheint die Spezifikation zu WoL etwas schwammig zu sein, so dass man etwas mit den Optionen rumspielen sollte bis man das gewünschte Ergebnis erzielt hat.