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.
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
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
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Wer hereindarf, entscheidest du einzeln. Eine offene Anmeldung gibt es nicht.
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.
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.
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.
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.
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.
Danach http://<server>:8460 im Browser öffnen und das Betreiberkonto anlegen. Das Passwort hat mindestens zwölf Zeichen; es verschließt auch den Tresor.
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.
/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.
/data| Datei | Was drinsteht |
|---|---|
nextrmnl.db | Konten, Verbindungen, Freigaben, Hostschlüssel, Einstellungen und die verschlossenen Tresore |
secret.key | Der Schlüssel zu den serverseitigen Geheimnissen: OIDC-Client-Geheimnis und die Seeds des zweiten Faktors |
backups/ | Die Sicherungen nach Zeitplan und vor Schemaänderungen |
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.
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.
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.
Kein RDP, kein VNC, kein Telnet, keine serielle Konsole. Für Bildschirme anderer Rechner gibt es Guacamole; nextrmnl ist die Shell und die Dateien.
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.
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.
Es gibt kein Konto bei uns und keinen Server von uns. Wer keinen eigenen betreibt, kann mit nextrmnl nichts anfangen.
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.
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.
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.
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.
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.
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.
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.
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.
Beides, umschaltbar oben rechts. Eine dritte Sprache wäre eine Datei und ein Eintrag in einer Liste, sonst nichts.