SXAccessSXAccessDoku
Dashboard öffnen

SSH ohne Bastion und ohne Schlüsselverteilung

Der CLI-Agent kann einen SSH-Server betreiben, dessen autorisierte Schlüssel SXAccess pflegt - ein Server ist also ohne Sprungserver und ohne irgendwohin kopierte Schlüssel erreichbar.

Üblicherweise erreicht man eine Serverflotte über SSH mit einer Bastion und einem Weg, öffentliche Schlüssel auf jeden Host zu bekommen - ein Lauf des Konfigurationsmanagements oder eine authorized_keys-Datei, die jemand von Hand bearbeitet. Beides wird mit der Zeit zum Problem: Die Bastion ist ein dauerhaft offener Port, und die Schlüsseldateien laufen dem tatsächlichen Personalstand hinterher.

Der CLI-Agent kann selbst einen SSH-Server betreiben. Er lauscht auf TCP 24822 an der Overlay-Adresse des Geräts, also an seiner Adresse innerhalb von SXAccess. Seine autorisierten Schlüssel sind die SSH-Schlüssel der Geräte, mit denen eine Zugriffsregel dieses Gerät verbindet, gleich in welcher Richtung. Auf einem Routing-Gerät eines Netzwerks gehören auch alle Geräte dazu, die eine Zugriffsregel eine seiner Ressourcen erreichen lässt. Die Schlüssel stammen aus der Netzwerkbeschreibung des Geräts, der Liste der Geräte und Routen, die der Management-Dienst auf jedem Gerät aktuell hält. Verbindet keine Zugriffsregel mehr ein anderes Gerät mit diesem, entfernt die nächste Aktualisierung den Schlüssel des anderen Geräts.

Einrichtung

  1. 1

    Den Server auf den Rechnern erlauben, die Sie erreichen wollen

    Server, Build-Hosts, Routing-Geräte. Keine Notebooks. Dafür sind Root-Rechte nötig.

    Auf einem Rechner, der schon verbunden ist, übernimmt start keine Einstellungen; stoppen Sie den Agenten also und starten Sie ihn mit der Option neu: sudo sh -c 'sxaccess stop && sxaccess start --allow-server-ssh'. Führen Sie es als eine Zeile aus: Eine Verbindung über SXAccess, etwa eine SSH-Sitzung zu dieser Maschine, bricht ab, bis start fertig ist.

    Auf einem neuen Linux-Rechner installiert der Block unten den Agenten und registriert den Rechner mit einem Registrierungsschlüssel und --allow-server-ssh; ersetzen Sie build-server durch den Namen des Rechners. Führen Sie den Block in bash oder zsh als root aus. Fügen Sie den ganzen Block ein und drücken Sie einmal Enter. Sobald Enrollment key: erscheint, fügen Sie den Schlüssel ein, und nur ihn, und drücken Sie Enter. Der Schlüssel wird nicht angezeigt, und bei einer leeren Zeile fragt der Block erneut. Die Schlüsseldatei wird am Ende gelöscht, ob der Beitritt gelungen ist oder nicht. Haben Sie den Block mit Strg+C abgebrochen, löschen Sie sie mit rm -f /run/secrets/sxaccess-key.

    shell
    curl -fsSL https://pkgs.sxaccess.com/install.sh | sh{  install -d -m 700 /run/secrets  install -m 600 /dev/null /run/secrets/sxaccess-key  KEY=''  until [ -n "$KEY" ]; do printf 'Enrollment key: '; read -rs KEY || break; echo; done  [ -n "$KEY" ] && printf '%s' "$KEY" > /run/secrets/sxaccess-key && unset KEY &&    sxaccess start --enrollment-key-file /run/secrets/sxaccess-key --hostname build-server --allow-server-ssh &&    sxaccess info  rm -f /run/secrets/sxaccess-key}
  2. 2

    SSH Access einschalten

    Öffnen Sie im Dashboard Devices → das Gerät, schalten Sie unter Configuration die Option SSH Access ein, bestätigen Sie mit Enable und wählen Sie Save changes.

  3. 3

    SSH in einer Zugriffsregel freigeben

    Access → Access rules → Create access rule. Quelle: die Gruppe der Personen, die diese Rechner administrieren. Ziel: die Gruppe, in der die Rechner sind. Protokoll TCP, Port 24822, One-way. Speichern Sie mit Create access rule. Eine Regel für Port 22 erreicht den eigenen sshd des Hosts, nicht diesen Server.

  4. 4

    Verbinden

    Verbinden Sie sich von einem Gerät der Quellgruppe, auf dem der CLI-Agent läuft. sxaccess shell erwartet [user@]host: user ist ein Konto auf dem Zielgerät, host sein Name oder seine Overlay-Adresse (Spalte Address unter Devices). Der Befehl braucht lokal Root-Rechte, und -p verbindet mit einem anderen Port. sxaccess info -d listet die Geräte auf, mit denen eine Zugriffsregel Ihr Gerät verbindet; das Zielgerät muss darunter sein.

    shell
    sudo sxaccess shell deploy@build-server

Was eine Sitzung kann

Der Server akzeptiert nur interaktive Terminalsitzungen: keine entfernten Befehle, kein scp oder sftp, keine Portweiterleitung. Dafür nutzen Sie den eigenen sshd des Hosts.

sxaccess shell gleicht zuerst den Host-Schlüssel des Ziels mit dem Schlüssel ab, den SXAccess für dieses Gerät verteilt. Eine Rückfrage, ob Sie dem Host vertrauen, gibt es bei der ersten Verbindung nicht, und ein Host mit einem anderen Schlüssel oder eine Adresse, die zu keinem Gerät gehört, wird abgewiesen.

Was das ersetzt

  • Die Bastion. Es gibt keinen öffentlichen SSH-Port, den Sie freigeben müssten: Der Server lauscht nur an der Overlay-Adresse des Geräts, jede Sitzung läuft also innerhalb von SXAccess.
  • Die Schlüsselverteilung. Autorisierte Schlüssel pflegt SXAccess anhand der Netzwerkbeschreibung statt eines Laufs des Konfigurationsmanagements.
  • Die Checkliste für Ausscheidende. Sperren Sie ein Mitglied, laufen alle Geräte, die es per Anmeldung registriert hat, sofort ab und werden getrennt. Entfernen Sie es danach aus der Organisation, werden diese Geräte gelöscht, und ein gelöschtes Gerät verschwindet aus jeder Netzwerkbeschreibung, mitsamt seinem SSH-Schlüssel. Siehe Offboarding.

Trotzdem sinnvoll

  • Den eigenen SSH-Dienst des Hosts weiterhin vom Internet fernhalten. SXAccess macht einen öffentlichen Port überflüssig; es schließt keinen, den Sie offen gelassen haben.
  • Das Konto nennen. Geben Sie jedes Mal user@ mit einem persönlichen oder einem Rollenkonto an, damit die eigenen Protokolle des Ziels zeigen, wer sich angemeldet hat.
  • SSH Access dort abschalten, wo niemand es braucht. Der Server läuft nur, solange beide Schalter an sind.

Wenn keine Verbindung zustande kommt

  • Enabling the SXAccess SSH server requires root. Um den Server zu erlauben, sind auf dem Zielgerät Root-Rechte nötig. Die Meldung schlägt zwei sudo-Befehle vor; führen Sie stattdessen sudo sh -c 'sxaccess stop && sxaccess start --allow-server-ssh' als eine Zeile aus, wie in Schritt 1.
  • This device is already connected, und SSH funktioniert trotzdem nicht. Solange das Gerät verbunden ist, übernimmt start keine Einstellungen; siehe start. Starten Sie den Agenten mit der Option neu: sudo sh -c 'sxaccess stop && sxaccess start --allow-server-ssh'. Führen Sie es als eine Zeile aus: Eine Verbindung über SXAccess, etwa eine SSH-Sitzung zu dieser Maschine, bricht ab, bis start fertig ist.
  • error: this command needs Administrator rights. Auch sxaccess shell braucht auf Ihrem eigenen Gerät Root-Rechte. Starten Sie den Befehl mit sudo.
  • SSH connection failed, und sxaccess info -d führt das Zielgerät nicht auf. Keine Zugriffsregel verbindet Ihr Gerät mit ihm. Legen Sie die Regel aus Schritt 3 an, oder prüfen Sie, ob Ihr Gerät zur Quellgruppe der Regel gehört.
  • SSH connection failed, und das Zielgerät wird aufgeführt. Dort läuft der Server nicht. Prüfen Sie unter Devices, ob das Zielgerät online ist und ob SSH Access eingeschaltet und gespeichert ist. Auf dem Zielgerät muss der Agent mit --allow-server-ssh und ohne --block-inbound laufen. Um diese Sperre aufzuheben, führen Sie sxaccess stop && sxaccess start --block-inbound=false aus. Führen Sie es als eine Zeile aus: Eine Verbindung über SXAccess, etwa eine SSH-Sitzung zu dieser Maschine, bricht ab, bis start fertig ist.
  • Das Zielgerät läuft unter Windows oder nutzt eine der Apps. Dort gibt es den Server nicht: Er läuft nur mit dem CLI-Agenten unter Linux und macOS.