Homeserver: Einfach runterfahren

Wenn der Server läuft, bin ich zufrieden. Trotzdem möchte ich ihn ab und an wieder abschalten. Um den Server, auf dem FreeNAS läuft, herunterzufahren, kann man das Webinterface aufrufen und mit einigen Klicks den Server ausschalten. Dafür muss ich aber einen Browser offen haben, die URL zum Webinterface eingeben, meinen Benutzer und Passwort eintragen und dann erst komme ich über das Menü zum Herunterfahren. Nicht sehr bequem.

Ähnlich umständlich ist es sich über die Konsole mit SSH auf dem Server einzuloggen und per shutdown den Server schlafen zu legen. Das ist aber ein guter Ansatz. Ich habe mir ein Shellscript geschrieben, dass einen Rechner mit shutdown herunterfährt. Dazu logge ich mich über SSH mit einem auf dem Server authorisierten Benutzer ein (siehe vorheriger Beitrag) und rufe das Shutdown-Kommando auf. Im Folgenden ein Auschnitt aus dem Shellscript:

# SSH command string
SSH_CMD="shutdown -p now"

# Pruefe ob Host anpingbar, ansonsten breche ab
ping -c 2 $SSH_HOST > /dev/null
if [ $? -gt 0 ] ; then
	echo "Host with IP $SSH_HOST is not reachable."
	exit
else
	# ### SSH-Aufruf
	# Ruft auf entferntem Server ein Kommando auf
	ssh $SSH_USER@$SSH_HOST "$SSH_CMD"
fi

Das klappt ja wunderbar! Aber ich müsste trotzdem auf dem Mac jedes Mal das Terminal öffnen und das Script aufrufen. Ich nutze daher den Umweg über ein Applescript. In Mac OS X den Skripteditor öffnen und die folgende Zeile in ein neues Skript einfügen:

do shell script "~/Scripts/host-shutdown.sh user ip"

Ersetzt werden muss natürlich user und ip mit dem Benutzer und der IP-Adresse/URL, welche dem Shellscript übergeben werden sollen. Anschließend kann das Applescript als Programm abgespeichert werden und ist nun wie jede andere Anwendung per Doppelklick ausführbar.

Ich habe mir noch ein Icon erstellt für mein Applescript-Programm und habe es nun im Dock liegen. :)

Skript: host-shutdown.sh

Einloggen auf dem Server mit SSH ohne Passwort

Im letzten Artikel habe ich versprochen aufzuklären darüber, wie man sich auf einem Server mit SSH über das Netzwerk einloggt; ohne ein Passwort. In meinem Fall ist das besonders nötig, da ich auf dem Server ein Shellscript aufrufe. Das möchte ich natürlich nicht jedes Mal manuell machen und dabei ein Passwort eingeben müssen. Außerdem wir das noch nützlich sein, wenn ich den Server herunterfahren möchte.

Was muss also getan werden damit ich ohne ein Passwort einzugeben mich mit SSH einloggen kann? Zunächst benutzen wir das Kommandozeilenprogramm ssh-keygen auf der lokalen Maschine um ein Schlüsselpaar zu generieren:

ssh-keygen -t rsa

Dabei sollten die vorgegebenen Werte für aufkommende Fragen übernommen werden und kein Passwort eingegeben werden.

Von der lokalen Maschine aus erstellen wir nun auf dem Server mit dem Benutzer über SSH das Verzeichnis ~/.ssh, mit dem anschließend ohne Passwort das Einloggen auf dem Server möglich sein soll:

ssh user@server mkdir -p ~/.ssh

Der letzte Schritt ist den generierten Schlüssel der lokalen Maschine auf dem Server zu authorisieren. Dazu muss der lokale Schlüssel an die Datei ~/.ssh/authorized_keys auf dem Server angehängt werden. Also wird von der lokalen Maschine aus Folgendes ausgeführt:

cat ~/.ssh/id_rsa.pub | ssh user@server 'cat >> ~/.ssh/authorized_keys'

Jetzt ist das Einloggen von der lokalen Maschine aus auf dem Server ohne Passwort möglich.

Credits: http://linuxproblem.org/art_9.html