SSH zwischen zwei Raspberry Pi realisieren

Kommunikation via SSH ist von entscheidender Bedeutung, wenn ich mein Vorhaben vom voringen Beitrag zum Stromverbrauch mit den beiden Raspberry Pi umsetzen will. Problematisch ist hierbei, dass der PiMedia ja nicht einfach ausgeschaltet werden darf – sondern im Idealfalle vorher heruntergefahren werden sollte. PiServer bekommt den Befehl, PiMedia abzuschalten. Dies soll mit SSH über ein simples Shell-Script realisiert werden. Die Vorbereitungen hierzu erkläre ich hier, das eigentliche Shell Script folgt dann später. Die Vorgehensweise ist einfach:
  • zuerst wird mittels SSH der Befehl zum Herunterfahren von PiMedia gegeben
  • anschließend gebe ich PiMedia ausreichend Zeit sich selbst zu beenden
  • Jetzt kann ich die Steckdose sicher abschalten

Kommunikation via SSH

SSH kann PiServer mit Raspian von hause aus, auch der PiMedia mit Raspbmc versteht (wenn es denn aktiviert ist) SSH. Im Terminal der PiServer kann ich mich einfach über SSH verbinden:
ssh pi@192.168.178.100
Anschließend werde ich nach einem Passwort gefragt, und kann dann den Befehl zum herunterfahren geben:
sudo poweroff
Nun will ich das ganze ja aber aus einem Shell-Script aufrufen – eine Eingabe des Passwortes ist also nicht möglich. Hierfür gibt es zwei Lösungen: Passwortfreier Zugang mittels authorised_keys oder Übergabe des Passwortes mittels sshpass. Ich persönlich finde die Variante mit sshpass deutlich angenehmer. Mit
sudo apt-get install sshpass
installiere ich das nur wenige KB große Tool. Ein Test, ob es wie gewünscht funktioniert kann ich mit
sshpass -p PASSWORT ssh pi@192.168.178.100 'uptime'
testen. Der Befehl uptime gibt lediglich die Zeit zurück, seit wann PiMedia bereits eingeschaltet ist. Die übergabe des Passwortes in dieser Form ist jedoch eine potentielle Sicherheitslücke – jeder, der das Script sieht weiß das Passwort von meinem PiMedia. Dies will ich ändern.

SSH-Passwort auslagern

Im Benutzerorder meines Users von PiServer lege ich die Datei .sshpass an, welche das Passwort enthält.
nano ~/.sshpass
Nun sorge ich dafür, das lediglich der aktive Benutzer (pi) diese Datei lesen und schreiben darf:
chmod 0600 ~/.sshpass
Jetzt kann NUR mein einer Benutzer diese Datei verwenden, alle anderen Nutzer haben dazu keine Berechtigung. Ein kurzer Test, ob die Übergabe des Passwortes funktioniert:
sshpass -f ~/.sshpass ssh pi@192.168.178.100 'uptime'
Das SSH Passwort wird mit sshpass übergeben
Ausgabe vom SSH-Befehlt ‚uptime‘ des PiMedia über den PiServer – mit sicherer Passwort-Übergabe dank sshpass

Zwei Anmerkungen zur Syntax:

  1. Übergebe ich am Ende (innerhalb der Anführungszeichen) einen Befehl, wird dieser ausgeführt, die SSH-session anschließend wieder beendet. Wenn ich keinen Befehl übergebe werde ich lediglich auf dem zweiten Raspberry eingeloggt, kann dann meine Befehle eingeben und komme mit „exit“ wie gewohnt wieder zu meinem ersten Raspberry zurück.
  2. Wenn ich mehrere Befehle übergeben will, kann ich diese mittels && verknüpfen:
sshpass -f ~/.sshpass ssh pi@192.168.178.100 'befehl1 && befehl 2'

Remote-Poweroff mittels SSH

Funktioniert dies, kann ich nun den Befehl zum Herunterfahren testen:
sshpass -f ~/.sshpass ssh pi@192.168.178.100 'sudo poweroff'
Im Prinzip sollte PiMedia jetzt herunterfahren. Einige Befehle welche normalerweise per SSH funktionieren verweigern jetzt jedoch die Funktion, sie geben lediglich eine „unknown command“-Meldung zurück. Dies kann behoben werden, indem man den vollen Pfad angibt. Funktioniert „sudo poweroff“ also nicht, logge ich mich nochmal kurz auf PiMedia ein und frage mit
whereis poweroff
den Pfad ab. Entsprechend kann ich nun den Befehl anpassen:
sshpass -f ~/.sshpass ssh pi@192.168.178.100 ‚sudo /sbin/poweroff‘
Im nächsten Schritt erkläre ich die Funktion der schaltbaren Steckdosen, bevor ich danach das ganze in ein Shell-Script schreiben werde.

Autor: Jonas Rüter

Hallo, mein Name ist Jonas und ich bin der Betreiber dieser Webseite.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.