iTunes over SSH

Ich hatte 2007 schon einmal einen Artikel mit dem selben Titel geschrieben und es ist seitdem nicht weniger praktisch geworden, von unterwegs auf das heimische iTunes zugreifen zu können.

Die gute Nachricht: Nach einem Kommentar von Yann aus dem Januar 2010, der mich auf einen Blogpost bei iharder.net hinwies, konnte das ganze Vorgehen noch ein wenig verschlankt werden und beschränkt sich nun auf ein sehr kleines Shellscript:

#!/bin/sh
dns-sd -P "Home iTunes" _daap._tcp local 3689 localhost 127.0.0.1 "Arbitrary text record" & PID=$!
ssh -C -N -L 3689:127.0.0.1:3689 user@domain.de
kill $PID

Dank dem äusserst vielseitigen1 dns-sd Kommando, spart man sich den Betrieb des Network Beacons und erstellt die Bonjour-Annonce direkt im Script.

Im einzelnen:

Die erste Zeile weist den Interpreter /bin/sh als zuständig für das Script aus. No big deal.

Die zweite Zeile annonciert eine neue Proxy (-P) Bonjour-Ressource des Typs daap auf dem lokalen Port 3689 (Das ist quasi die Standard iTunes Netzwerk Konfiguration) auf dem lokalen Mac (localhost 127.0.0.1). Die entfernte Bibliothek kann genannt werden wie man mag, ich habe hier “Home iTunes” verwendet. Der “Arbitrary Text Record” wird nur aus syntaktischen Gründen benötigt. Dann wird noch die Prozessnummer des Kommandos in der Variable PID gespeichert.

In der nächsten Zeile wird dann der SSH-Tunnel gebaut. Die Option -C schaltet die Kompression ein, -N gibt keine interaktive Shell, sondern schickt den Tunnel in den Hintergrund. Nach -L wird der Tunnel definiert: Port 3689 lokal wird an Port 3689 auf der IP zwischen den Doppelpunkten weitergeleitet. Hier muss die IP des Computers eingesetzt werden, dessen iTunes aus der Ferne erreicht werden soll. Wenn iTunes- und SSH-Server auf der selben Maschine laufen, kann im Script auch die 127.0.0.1 für das Loopback-interface eintragen werden. Danach folgt nur noch der SSH-User und die dyndns oder sonstige Adresse.

Die letzte Zeile killt die Bonjour-Annonce wenn der Tunnel endet (z.B. wenn die IP wechselt während man verbunden ist).

In der Praxis und wenn alle Angaben stimmen, genügt dann die Ausführung des Scripts und die Eingabe des SSH-Passworts2 und man bekommt die heimische iTunes-Bibliothek angezeigt, als wäre man in seinem Heimnetz.

  1. und kaum dokumentierten []
  2. Alternativ kann man natürlich auch SSH-Zertifikate für die passwortlose Anmeldung verwenden []
  • la_tristesse

    Wenn ich das Script auf einer Plugbox mit ArchLinux-System betreiben möchte. Was für zusätzliche Programme müssten dann installiert werden oder inwiefern würde sich Anleitung unterscheiden?

  • http://instant-thinking.de der Dennis

    Wenn auf der Plugbox der sshd und ein Firefly-Mediaserver läuft, dann müsste das genau so funktionieren.

    Das dns-sd ist ja lokal auf dem Mac vorhanden und Firefly spricht genau so DAAP wie iTunes…

    Lasse mich doch wissen, wie es gelaufen ist.

  • Lukas

    Hallo Ich habe zu Hause eine Synology DiskStation stehen mit der neuesten Software. Natürlich wollte ich den mitgelieferten iTunes-Server auch ausser meines Heim-Netzwerks benutzen. Ich bin auf deine Anleitung gestossen und finde sie sehr gut! Leider funktionierte bei mir alles bis ich in iTunes zur DiskStation-Mediathek verbinden wollte. iTunes hat über eine halbe Stunde “Mit Mediathek verbinden”, passiert ist aber nichts.

    Nun habe ich einen anderen Ansatz mit AlmostVPN probiert. Obwohl das Programm mehr oder weniger das Gleiche macht wie dein Skript (Bonjour, SSH-Tunnel) läuft da alles einwandfrei.

    Weisst du an was das liegen könnte? Ich würde nämlich gerne deine Lösung verwenden, da sie so extrem elegant ist.

    Ich benutze iTunes 10.1.1 auf einem MacBook Pro mit OS X 10.6.5

  • http://instant-thinking.de der Dennis

    Lukas: Ein VPN und ein SSH-Tunnel sind schon ein bisschen was anderes… Ich habe ausserdem keine Synology-DiskStation und kenne mich daher mit deren Software nicht aus.

    Funktioniert denn ein normaler SSH-Login? Und ein normales SSH-Port Forwarding (Meinetwegen auf einen Webserver in deinem Netz, idealerweise einen, der auf der DiskStation läuft)?

    Wenn das beides klappt bleibt eigentlich nur noch die iTunes-Software auf der DiskStation über. Da handelt es sich vermutlich um den Firefly-Server und der hatte im letzten Herbst noch ein Problem mit iTunes 10

    Vielleicht liegt da dein Problem?

    Lasse mich doch wissen, ob und wie du zu einer Lösung gekommen bist, viel Erfolg!

  • Lukas

    Ja ich kann über SSH-Tunnel auf meinen Webserver (auf der DiskStation) zugreifen. Ich kann auch per Telnet meinen iTunes-Server (DiskStation) ansprechen und der antwortet.

    Ich denke du liegst richtig mit deiner letzten Vermutung. Synology benutzt für seine Software den Firefly-Server. Das erklärt auch so Einiges.

    Aufgrund meiner sehr beschränkten Kenntnisse vermute ich der entscheidende Punkt liegt darin, dass die AlmostVPN-Lösung (http://www.leapingbytes.com/almostvpn/ und http://forum.synology.com/enu/viewtopic.php?f=145&t=28841) eine lokale IP generiert über die dann der iTunes-Tunnel geführt wird (diese IP sieht man dann unter ifconfig). Wenn man das auch per Shell skripten könnte müsste es funktionieren. Da hören meine Kenntnisse aber schon auf.

  • la_tristesse

    Hat ein bisschen länger gedauert, bis ich es versuchen konnte. Leider kennt meine debian squeeze installation nicht den Befehl dns-sd:

    “/etc/mt-daapd_sshtunnel.sh -bash: dns-sd: command not found”

    Wäre es mit dieser Methode überhaupt möglich von einem anderen Betriebssystem z.B. WinXP auf die iTunes Freigabe des Plug Computers zurückzugreifen? Würde mich über eine Antwort freuen.

  • http://instant-thinking.de der Dennis

    @la_tristesse:

    Das dns-sd Kommando gibt es IIRC auch nur unter OS X.

    Und das Script soll doch auch gar nicht unter dem Linux laufen, oder? Ich ging davon aus, das deine Plugbox der Server ist zu dem du dich mit einem Mac-Client verbinden möchtest…

    Für Windows ist mir kein zu dns-sd äquivalentes Programm bekannt.

    Wenn du einen Linux-Client verwenden möchtest könntest du deine Versuche mit avahi starten. Das ist eine unter Linux lauffähige Implementierung von Zeroconf. Allerdings bräuchtest du dann auch einen Ersatz für iTunes, also einen Zeroconf-Mediaplayer…

    Wenn du dieses spannende Projekt angehst, lasse mich doch wissen wie es so lief.

    Viel Erfolg und Spaß!

  • Pingback: iPhoto over SSH