Zum Inhalt springen

nextrmnl

SSH und SFTP im Browser, auf deinem eigenen Server. Ein Terminal mit Reitern, die Dateien daneben, und ein Tresor je Konto für Schlüssel und Passwörter. Ein Container, eine Datei. Kein Konto bei uns, kein Preis, kein Abo.

Kostenlos, quelloffen unter AGPL-3.0, selbst betrieben, ein Docker-Container
Bildschirmfoto: das Terminal mit der angehefteten Verbindungsliste links
Dateien

Dateien neben dem Terminal

Ein Klick auf „Dateien“, und neben der Shell steht der Ordner des Rechners: hochladen per Ziehen und Ablegen, herunterladen, umbenennen, anlegen, löschen. Über dieselbe SSH-Verbindung, ohne zweites Programm und ohne zweites Passwort.

Ansehen
Bildschirmfoto: die Dateiliste eines Rechners rechts neben dem Terminal
Tresor

Schlüssel und Passwörter, die nur du lesen kannst

Jedes Konto hat einen Tresor, verschlossen mit dem Passwort des Kontos. Schlüssel erzeugst du darin oder fügst sie ein, Passwörter für Geräte ohne Schlüssel merkt er sich. Der Betreiber sieht nichts davon, eine Sicherung auch nicht.

Ansehen
Bildschirmfoto: der Tresor mit zwei Schlüsseln und zwei gespeicherten Passwörtern

Deine Zugänge liegen in einem Tresor, den nur dein Passwort öffnet. Nicht der Betreiber, nicht eine Sicherung, nicht ein Abzug der Datenbank kann sie lesen.

Ein Container, eine SQLite-Datei. Kein zweiter Dienst, keine Datenbank-Zugangsdaten, und eine Sicherung ist eine verschlüsselte Datei.

Warum

Warum noch ein Terminal im Browser?

01

PuTTY und WinSCP laufen auf dem Rechner, auf dem sie installiert sind. Vom Laptop im Wohnzimmer, vom Tablet oder vom Rechner in der Arbeit kommst du nicht an deine Server.

02

Web-Terminals gibt es einige. Die meisten legen Schlüssel und Passwörter so ab, dass der Server sie lesen kann, und damit jeder, der die Datenbank oder eine Sicherung in die Hand bekommt.

03

Ein Homelab ist selten für eine Person. Also Konten: Jeder sieht seine Verbindungen, teilt Adressen, nie Zugänge, und der Betreiber setzt die Grenzen nach draußen.

Funktionen

Was es kann

Wer PuTTY bedienen kann, findet sich sofort zurecht: Verbindung anklicken, Terminal, fertig. Die Verbindungsliste schwebt über dem Terminal und schließt nach der Auswahl; wer sie lieber dauerhaft sehen will, heftet sie links an. Mehrere Sitzungen liegen als Reiter nebeneinander, ein Knopf schaltet auf Vollbild.

Terminal

xterm.js im Browser, dahinter spricht der nextrmnl-Server SSH mit deinen Rechnern. Reiter für offene Sitzungen, Sprunghosts, ein Befehl nach dem Verbinden (etwa tmux), Keepalives, Vollbild auf Knopfdruck.

Dateien

SFTP über dieselbe SSH-Verbindung: Ordner durchsehen, hochladen per Ziehen und Ablegen mit Fortschritt, herunterladen, umbenennen, Ordner anlegen, löschen; einen vollen Ordner erst nach einer Rückfrage. Kein zweites Programm, kein zweites Passwort, kein zweiter Weg durch die Firewall.

Kopieren und Einfügen wie in PuTTY

Markieren kopiert. Strg+Umschalt+C, Strg+Einfg und Strg+C mit Markierung kopieren, Strg+V, Strg+Umschalt+V, Umschalt+Einfg und Rechtsklick fügen ein. Mehrere Zeilen zeigt nextrmnl erst an, bevor sie laufen.

Tresor

Ed25519- oder RSA-Schlüssel erzeugen oder vorhandene einfügen, auch mit Passphrase. Passwörter für Geräte, die keinen Schlüssel können. Der Tresor ist mit dem Passwort deines Kontos verschlossen und lässt sich als verschlüsselte Datei sichern und woanders wieder einlesen.

Hostschlüssel

Vor jeder Anmeldung wird der Schlüssel des Rechners verglichen. Ein unbekannter zeigt seinen Fingerabdruck, bevor du irgendetwas eingibst; ein geänderter wird verweigert, bis der Betreiber ihn annimmt. Nichts wird von selbst vertraut.

Erlaubte Ziele

Ab Werk verbindet nextrmnl nur in private Netze: 10.x, 172.16 bis 172.31, 192.168.x, 100.64.x für VPNs. Der Betreiber trägt weitere Netze und Namen ein oder öffnet es ganz. Eine Verbindung wird zur geprüften Adresse aufgebaut, nicht zu einer zweiten Auflösung des Namens.

Konten und Freigaben

Das erste Konto ist der Betreiber, die anderen kommen per Einladungslink. Eine Verbindung lässt sich freigeben: Die anderen sehen Name, Adresse und Einstellungen und melden sich mit ihrem eigenen Benutzer, Schlüssel oder Passwort an. Zugänge wandern nie mit.

Anmeldung

Passwort mit mindestens zwölf Zeichen, dazu auf Wunsch ein zweiter Faktor aus der Authenticator-App. Oder OpenID Connect: Keycloak, Authelia, Pocket ID und alles, was sich an die Norm hält. Für authentik richtet ein Knopf Anbieter, Anwendung, Signaturschlüssel und Zuordnung selbst ein.

Sicherungen

Kopien nach Zeitplan und vor jeder Schemaänderung, über die Sicherungsschnittstelle von SQLite statt als Dateikopie. Der Download ist ein AES-verschlüsseltes ZIP, das 7-Zip auch ohne nextrmnl öffnet. Einspielen zeigt vorher, was drin ist, und startet danach neu.

Protokoll

Vier Stufen, die tiefen schalten sich nach einer Weile selbst ab. Jede Zeile trägt eine Vorgangsnummer, die auch in der Fehlermeldung im Browser steht. Terminal-Inhalt, Tastendrücke, Passwörter, Schlüssel und Tokens stehen nie darin; ein Test sucht im Code danach.

Deutsch und Englisch

Beides, umschaltbar oben rechts, dazu hell und dunkel. Eine dritte Sprache ist eine JSON-Datei und ein Eintrag in einer Liste; ein Test prüft, dass keine Sprache hinterherhinkt.

Sicherheit

Was nextrmnl schützt und wo es aufhört

nextrmnl hält die Zugänge zu allen deinen Rechnern. Bei jeder Entscheidung gewinnt deshalb die sichere Seite, auch wenn sie unbequemer ist. Hier steht, was das heißt, damit du es vorher weißt.

Der Tresor

Aus deinem Passwort wird mit Argon2id ein Schlüssel abgeleitet, der den Tresorschlüssel umschließt; die Einträge sind mit AES-256-GCM verschlüsselt. Ein offener Tresor ist nichts als sein Schlüssel im Speicher des Servers, und der wird nach der Leerlaufzeit und bei jedem Neustart vergessen. Sicherungen enthalten den Tresor so verschlossen, wie er ist.

Zweiter Faktor

Ein Code aus der Authenticator-App zusätzlich zum Passwort, mit acht Wiederherstellungscodes für den Tag, an dem das Handy weg ist. Mit zweitem Faktor öffnet das Passwort allein nichts: Der Tresorschlüssel wartet im Speicher auf den Code, höchstens fünf Minuten und fünf Versuche. Der Betreiber kann den zweiten Faktor für alle Passwort-Konten verlangen.

Bremse und Sperre

Zehn falsche Passwörter oder Codes in Folge sperren das Konto für eine Viertelstunde, egal woher sie kommen. Das gilt auch für jede Passwortabfrage im angemeldeten Zustand, etwa vor dem Export des Tresors. Terminals enden mit der Anmeldung, zu der sie gehören.

Was der Tresor nicht kann. Wer dein Passwort hat, hat deinen Tresor. Deshalb: zweiten Faktor einschalten, nextrmnl hinter einen Proxy mit TLS stellen, und der Betreiber lässt die erlaubten Ziele auf dem eigenen Netz. Vergisst du dein Passwort, ist der Tresor verloren, denn genau das ist der Punkt: Niemand sonst kann ihn öffnen.
nextrmnl.example.com
Bildschirmfoto: der Tresor mit Schlüsseln und gespeicherten Passwörtern
Zwei Schlüssel, zwei gespeicherte Passwörter. Den privaten Teil eines Schlüssels zeigt nextrmnl nie an, auch nicht dem Besitzer.
Mehrere Leute

Ein Homelab ist selten für eine Person

Wer hereindarf, entscheidest du einzeln. Eine offene Anmeldung gibt es nicht.

1

Einladen

Du erzeugst einen Link, der sieben Tage und für ein Konto gilt. Wer ihn öffnet, wählt Name und Passwort selbst; niemand tippt ein fremdes Passwort ein.

2

Zwei Wege hinein

Passwort, auf Wunsch mit zweitem Faktor, oder die Anmeldung über deinen Anbieter. Ein bestehendes Konto verknüpft sich selbst mit seiner Identität dort; neue Konten über den Anbieter gibt es nur, wenn du es erlaubst.

3

Getrennt

Jedes Konto hat eigene Verbindungen und einen eigenen Tresor. Eine Freigabe teilt Adresse und Einstellungen; das Mitglied meldet sich mit seinem Benutzer, seinem Schlüssel oder Passwort an, und nur sein eigener Startbefehl läuft in seiner Shell.

4

Im Blick

Der Betreiber sieht, wer gerade wo verbunden ist, kann eine Sitzung trennen, ein Konto überall abmelden oder dessen zweiten Faktor zurücksetzen. Was getippt wurde, sieht er nie.

authentik mit einem Knopf

Die Einrichtung eines OIDC-Anbieters ist immer dasselbe Dutzend Formulare. Für authentik nimmt nextrmnl dir das ab: Adresse und ein einmaliger API-Token, und es legt Signaturschlüssel, die Zuordnung für die bestätigte E-Mail-Adresse, Anbieter und Anwendung selbst an. Den Token braucht es einmal und speichert ihn nicht. Wer lieber ohne Token arbeitet, lädt ein Blueprint herunter.

Wer über den Anbieter kommt, bringt dessen zweiten Faktor mit. nextrmnl fragt dann keinen eigenen Code ab. Der Tresor bleibt trotzdem mit dem nextrmnl-Passwort verschlossen; ein Konto, das nur über den Anbieter kommt, legt dafür ein eigenes Tresor-Passwort fest.
Installation

Mit Docker starten

Danach http://<server>:8460 im Browser öffnen und das Betreiberkonto anlegen. Das Passwort hat mindestens zwölf Zeichen; es verschließt auch den Tresor.

docker-compose.yml
services:
  nextrmnl:
    image: ghcr.io/derkezorm/nextrmnl:latest
    container_name: nextrmnl
    restart: unless-stopped
    ports:
      - "8460:8000"
    volumes:
      - ./data:/data
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Europe/Berlin

Die vollständige Datei mit allen Schaltern und einer Begründung für jeden liegt im Repository.

Bis das erste Konto besteht, kann es jeder anlegen. In diesem Moment gibt es kein Konto, das sich anmelden könnte, also kann es gar nicht anders sein. Richte nextrmnl im Heimnetz ein, bevor du es nach außen stellst.
/data gehört auf eine lokale Platte, nie auf eine SMB- oder NFS-Freigabe. Das ist der eine Weg, auf dem SQLite wirklich Daten verliert: Seine Sperren arbeiten über Netzlaufwerke nicht zuverlässig. Auf einem NAS nimmst du einen Pfad auf dem internen Datenträger.

Zu sichern ist alles unter /data

DateiWas drinsteht
nextrmnl.dbKonten, Verbindungen, Freigaben, Hostschlüssel, Einstellungen und die verschlossenen Tresore
secret.keyDer Schlüssel zu den serverseitigen Geheimnissen: OIDC-Client-Geheimnis und die Seeds des zweiten Faktors
backups/Die Sicherungen nach Zeitplan und vor Schemaänderungen
Die Tresore hängen nicht an secret.key. Sie öffnen sich nur mit dem Passwort des jeweiligen Kontos, auch in einer Sicherung. Unter Einstellungen, Sicherungen schreibt nextrmnl dir ein verschlüsseltes Archiv mit Datenbank und Schlüssel; wer es findet, hat damit trotzdem keinen einzigen Zugang.

Hinter einem Reverse Proxy

nextrmnl gehört hinter TLS, bevor du es von irgendwo anders als vom eigenen Schreibtisch benutzt. Es hält die Zugänge zu deinen Rechnern, und das Einfügen per Rechtsklick geht ohnehin nur über HTTPS. Die Adresse, unter der die Leute nextrmnl erreichen, trägst du unter Einstellungen, Anmeldung ein; sie steht in Einladungslinks und ist die Rückkehradresse beim OIDC-Anbieter. NEXTRMNL_TRUSTED_PROXIES nennt den Proxy, damit die Anmeldebremse die echten Absender sieht.

Grenzen

Was es nicht ist

Stand ist Version 0.2.0. nextrmnl verbindet, überträgt Dateien, hält Schlüssel und Passwörter im Tresor, prüft Hostschlüssel, kennt Konten und Freigaben, sichert sich selbst; über 190 Tests wachen darüber, ein Teil davon gegen einen echten SSH-Server. Es ist trotzdem jung. Probier es erst an einem Rechner aus, bei dem dir Ärger nichts ausmacht.

Nur SSH und SFTP

Kein RDP, kein VNC, kein Telnet, keine serielle Konsole. Für Bildschirme anderer Rechner gibt es Guacamole; nextrmnl ist die Shell und die Dateien.

Kein Mitschnitt

Sitzungen werden nicht aufgezeichnet, weder das Bild noch die Tasten. Das Protokoll sagt, wer wann wohin verbunden war, sonst nichts. Das ist Absicht und bleibt so.

Kein Passwort-Reset für den Tresor

Ein vergessenes Passwort heißt: neuer, leerer Tresor. Was drin war, kann niemand zurückholen, auch der Betreiber nicht. Sichere den Tresor deshalb als Datei.

Kein gehosteter Dienst

Es gibt kein Konto bei uns und keinen Server von uns. Wer keinen eigenen betreibt, kann mit nextrmnl nichts anfangen.

Fragen

Häufige Fragen

Was kostet nextrmnl?

Nichts. Der Quelltext steht unter der AGPL-3.0, betreiben tust du ihn selbst. Es gibt keine bezahlte Fassung und keine Funktion hinter einem Preis.

Kann der Betreiber meine Schlüssel sehen?

Nein. Der Tresor jedes Kontos ist mit dem Passwort dieses Kontos verschlossen. Weder der Betreiber noch eine Sicherung noch ein Abzug der Datenbank kann ihn lesen. Was der Betreiber sieht: welche Konten es gibt, wer wann wohin verbunden war, und die Namen und Adressen freigegebener Verbindungen.

Was passiert, wenn ich mein Passwort vergesse?

Der Tresor ist dann verloren, das ist der Preis dafür, dass ihn niemand sonst lesen kann. Das Konto bleibt, Schlüssel und Passwörter trägst du neu ein. Unter Tresor lässt sich der Inhalt jederzeit als verschlüsselte Datei sichern und später wieder einlesen, hier oder auf einem anderen nextrmnl.

Welche Rechner funktionieren?

Jeder Rechner mit einem SSH-Server: Linux, BSD, ein NAS, ein Switch oder Router. Für Geräte, die keinen Schlüssel annehmen, merkt sich der Tresor das Passwort. SFTP braucht einen SFTP-Server auf der Gegenseite; auf einer Synology ist er getrennt einzuschalten.

Läuft es auf einer Synology, auf Unraid oder TrueNAS?

Ja. Ein einzelner Docker-Container, auf der Synology im Container Manager als Projekt aus der Compose-Datei, sonst überall, wo Docker läuft. Achte auf den Pfad für /data: Er gehört auf den internen Datenträger, nicht auf eine Netzfreigabe.

Kann ich es mit mehreren Leuten benutzen?

Ja. Du lädst einzeln ein, jedes Konto hat eigene Verbindungen und einen eigenen Tresor. Eine Verbindung lässt sich freigeben; dabei wandern Name, Adresse und Einstellungen, nie der Zugang. Das Mitglied meldet sich mit seinem eigenen Benutzer und Schlüssel an.

Gibt es einen zweiten Faktor?

Ja: ein Code aus einer Authenticator-App wie Aegis, 2FAS oder Google Authenticator zusätzlich zum Passwort, mit acht Wiederherstellungscodes. Der Betreiber kann ihn für alle Passwort-Konten verlangen; wer sich aussperrt, bekommt ihn vom Betreiber zurückgesetzt.

Warum SQLite und nicht Postgres?

Weil es hier ein Vorteil ist und kein Sparzwang: kein zweiter Container, keine Datenbank-Zugangsdaten, und eine Sicherung ist eine Datei. Die Datenbank hält Konten und Verbindungen; die Last liegt in den SSH-Sitzungen, nicht in Abfragen.

Deutsch oder Englisch?

Beides, umschaltbar oben rechts. Eine dritte Sprache wäre eine Datei und ein Eintrag in einer Liste, sonst nichts.