Mit Tailscale SSH auf einen Mac ohne Bildschirm
Ein Mac ohne angeschlossenen Bildschirm erledigt bei mir ein paar geplante Jobs. Er steht hinter einem gewöhnlichen Heimrouter, hat keine öffentliche IP, und ich habe an dem Router nie einen Port geöffnet. Vom Laptop aus, egal wo der gerade steht, funktioniert ssh auf diesen Mac, als stünde er auf dem Schreibtisch. Tailscale macht das Netzwerk, und was die meisten übersehen: Es kann auch die SSH-Schlüssel übernehmen.
Der Aufbau
Installier Tailscale auf beiden Rechnern und meld dich mit demselben Konto an. Jeder Rechner bekommt eine Adresse im privaten Netz und, mit MagicDNS in der Admin-Konsole eingeschaltet, einen Namen, der einfach sein Hostname ist. Auf dem Mac, den du erreichen willst, schaltet ein Flag Tailscale SSH ein:
tailscale up --ssh
Ab da ist die Anmeldung die Tailscale-Identität, keine authorized_keys-Datei. Ein Gerät, das als ich angemeldet ist, kommt rein; ein anderes erreicht Port 22 gar nicht. Ein neuer Laptop braucht keinen kopierten Schlüssel, er braucht ein Login. Einen alten Laptop ausmustern heißt "in der Admin-Konsole entfernen". Die erste Verbindung von einem neuen Gerät öffnet einen Browser-Tab, in dem ich bestätige, dass ich es wirklich bin; das ist der Check-Modus der Standardregel, und für Rechner, denen du vertraust, kannst du ihn auf Accept stellen.
Zwei macOS-Details. Die App aus dem App Store kann sich zu Tailscale-SSH-Servern verbinden, aber selbst keiner sein; für die Serverseite willst du den Homebrew-Build (brew install tailscale), der tailscaled als Dienst laufen lässt. Und ich lasse "Entfernte Anmeldung" in den Systemeinstellungen trotzdem an, mit Schlüssel, als Rückfalllösung für den Tag, an dem Tailscale SSH selbst das ist, was ich gerade repariere.
Dann ssh <konto>@<rechner> von überall mit Internet, und es ist jedes Mal dieselbe Shell. Was ich sonst noch mit Tailscale mache, steht auf seiner Werkzeugseite.
Wenn er nicht mehr antwortet
Dreimal hat er nicht mehr geantwortet. Jedes Mal war es eins von diesen dreien, in dieser Reihenfolge.
Der Client läuft nicht. Nach einem macOS-Update hat der Mac neu gestartet, war wieder im Netz und nie wieder im Tailnet, weil der Daemon nicht für den Start beim Booten registriert war. tailscale status auf dem Laptop zeigte ihn offline, "last seen" vor Stunden. Einmal richten: sudo brew services start tailscale schreibt den launchd-Job. Danach absichtlich neu starten und nachsehen, ob er wiederkommt.
Das Login ist abgelaufen. Node-Keys laufen standardmäßig nach 180 Tagen ab, und an einem Rechner ohne Tastatur klickt niemand auf "erneut anmelden". Die Admin-Konsole zeigt das Gerät mit einem Expired-Badge. Für Rechner ohne Bildschirm setze ich "Disable key expiry" an dem Tag, an dem ich sie hinzufüge. Mach das am ersten Tag, denn Tag 180 ist immer ein Sonntag.
Der Mac schläft. Ein Mac ohne Display schläft trotzdem, und ein zugeklapptes MacBook schläft tiefer. Energieeinstellungen: Ruhezustand bei ausgeschaltetem Display verhindern, für Netzwerkzugriff aufwachen. Für den geschlossenen Deckel macht sudo pmset -a disablesleep 1, was die Einstellungen nicht hergeben. Schlafend sieht vom Laptop aus genauso aus wie offline, also prüfe ich das, bevor ich irgendetwas anderes verdächtige.
Die kurze Diagnose
Vom Laptop aus sagt mir tailscale status, ob der Mac überhaupt online ist. Ist er online und SSH verweigert trotzdem, liegt es am Mac: Ein späteres tailscale up ohne --ssh beschwert sich und verlangt --reset, und wer dem folgt, hat das Flag verloren (Flags sind nicht klebrig, wiederhol sie alle). Oder die Policy hat sich geändert. Ist er offline, ist es eins der drei oben, und das oberste war am häufigsten schuld.
