Changelog

Was sich geändert hat.

Alle veröffentlichten Versionen — direkt aus den GitHub-Releases. Vollständige Commit-Historie im GitHub-Verlauf.

  • CLI-Verlauf: Was über den CLI-Begleiter ausgeführt wurde, ist jetzt in der App sichtbar. Jeder NeoSSHWinManager-cli.exe-Aufruf für eine gespeicherte Verbindung wird aufgezeichnet und kann in der GUI überprüft werden – sowohl --exec-Aufrufe (Befehl, Ausgabe, Exit-Code) als auch interaktive Sitzungen (Vollbild-Transkript). Eine neue Schaltfläche „CLI-Verlauf anzeigen“ in den Verbindungsdetails öffnet ein spezielles Bedienfeld (src/ui/clihistorypanel.py), in dem die neuesten Einträge zuerst aufgeführt werden – ein Sitzungs-/Befehlsabzeichen, ein Zeitstempel (Start–Ende für Sitzungen), die Befehlszeile und ihr Exit-Code. Die Ausgabe wird reduziert, bis darauf geklickt wird, damit lange Verläufe scannbar bleiben – plus „Als .txt herunterladen“ für den vollständigen Verlauf und „Verlauf löschen“. UI-Strings werden in allen sechs unterstützten Sprachen ausgeliefert.
  • Verlaufseinträge werden in einer neuen verschlüsselten Clihistory-Tabelle gespeichert: Befehl und Ausgabe werden mit demselben benutzerspezifischen Schlüssel wie Verbindungskennwörter verschlüsselt, niemals im Klartext geschrieben und sind auf 500 Einträge pro Host (die ältesten werden durch Einfügereihenfolge bereinigt) und 256 KB pro Eintrag begrenzt, um das Datenbankwachstum zu begrenzen. Der CLI-Prozess speichert niemals den Verschlüsselungsschlüssel der GUI-Sitzung, daher übergibt er den Eintrag über die vorhandene benutzerbeschränkte IPC-Pipe an die laufende GUI-Instanz (neue Clilog-Aktion, dieselbe Zugriffsschlüsselprüfung und Ratenbegrenzung pro PID wie cli_connect), die die Verschlüsselung und Speicherung übernimmt.
  • Interaktive Sitzungstranskripte werden so gerendert, wie der Bildschirm tatsächlich aussah, und nicht als roher Bytestream ausgegeben: Rücktaste und ENTF löschen jetzt das Zeichen links, anstatt nach einem Tippfehler \x08-Wurf im Protokoll zu belassen, und ein bloßer Wagenrücklauf positioniert den Cursor neu, anstatt als neue Zeile behandelt zu werden – Fortschrittsbalken (pip, apt, curl, docker pull, npm) zeigen also ihren Endzustand an, anstatt eine Zeile pro Neuzeichnung. ANSI/VT100-Escape-Sequenzen werden entfernt. Die Aufzeichnung erfolgt ausschließlich nach bestem Wissen und Gewissen und ist vollständig ausnahmslos. Es kann niemals Auswirkungen auf die SSH-Sitzung, ihren Exit-Code oder ihre Laufzeit haben.
  • NEOSSHEXECTIMEOUT (Sekunden) legt ein optionales Zeitlimit für --exec fest; nicht gesetzt bedeutet keine Begrenzung.
  • SSHFS-Laufwerke verschwinden nicht mehr, weil ihr lang laufender Prozess verloren geht oder in GUI-eigenen Debug-Pipes blockiert wird. Mounts werden jetzt im Vordergrundmodus mit übergeordneten Standardhandles ausgeführt, behalten ihr Prozesshandle und erfordern einen freien Laufwerksbuchstaben, der stabil verfügbar wird.
  • Disconnect findet jetzt den genauen SSHFS-Prozess über die gebündelte psutil-Abhängigkeit anstelle des veralteten WMIC-Befehls, behandelt ein bereits fehlendes Laufwerk als Erfolg und bricht veraltete Explorer-Label-Updates ab, die zu Ghost-Drive-Einträgen führen könnten.
  • Das CLI-Tool wurde immer mit Code 0 beendet, auch wenn nichts funktionierte. launchsshincurrentterminal() gab nichts zurück und climain.py meldete bedingungslosen Erfolg, sodass eine fehlgeschlagene Verbindung, ein abgelehnter Hostschlüssel oder eine fehlgeschlagene Authentifizierung nicht von einer erfolgreichen Ausführung zu unterscheiden war – Skripte, die die CLI aufrufen, konnten einen Fehler überhaupt nicht erkennen. Die Funktion gibt jetzt einen Exit-Code zurück und --exec gibt den Exit-Status des Remote-Befehls weiter (über recvexit_status()), anstatt ihn zu verwerfen.
  • Die Ausgabe von --exec ging verloren, wenn der Aufrufer stdout umleitete. Die Ausgabe wurde über WriteFile in den Bildschirmpuffer der CONOUT$-Konsole geschrieben, was nicht die Standardausgabe des Prozesses ist: NeoSSHWinManager-cli.exe --connect-cli … --exec "…" > out.txt hat einen Erfolg gemeldet und eine leere Datei erstellt. Der nicht interaktive Modus schreibt jetzt ausschließlich in die realen Prozessströme, und der interaktive Pfad greift auf diese zurück, wenn kein gültiges Konsolenhandle vorhanden ist, anstatt ins Leere zu schreiben.
  • --exec wurde nach 30 Sekunden abgebrochen. Das hartcodierte Timeout war zu kurz für wesentliche Dinge (Testläufe, NPM-Installation, Backups) und unterbrach die Ausführung mitten im Befehl. ssh selbst legt keine solche Grenze fest. Es gibt kein Standardlimit mehr – siehe NEOSSHEXECTIMEOUT oben.
  • --exec-Statusmeldungen („Verbinden mit …“) gingen an stdout und kontaminierten die Befehlsausgabe, die von Skripten analysiert wird; Sie gehen jetzt zu stderr und überlassen stdout allein dem Remote-Befehl. Ausführungsfehler mit einem leeren str(e) – häufig bei socket.timeout – führen nicht mehr zu einem bloßen „Fehler beim Ausführen des Befehls:“ ohne Ursache, und ein Timeout sagt dies jetzt explizit und zeigt auf NEOSSHEXECTIMEOUT.
  • Der IPC-Listener hat alle Anfragen, die größer als 64 KB sind, stillschweigend verworfen. Ein einzelnes ReadFile für eine Nachrichtenmodus-Pipe signalisiert eine übergroße Nachricht mit ERRORMOREDATA und nicht mit einem Fehler, sodass die GUI lediglich sah, dass eine abgeschnittene Nutzlast nicht analysiert werden konnte, und überhaupt keine Anfrage verarbeitete. Der Listener leert nun die gesamte Nachricht (mit einer Obergrenze von 2 MB) und die Pipe-Puffer wurden auf 1 MB erhöht – erforderlich für cli_log-Einträge mit Befehlsausgaben und ein latenter Fehler für jede zukünftige große Anfrage.
Datei Größe
NeoSSHWinManager.exe 180.7 MB
NeoSSHWinManager-Setup-1.5.5.exe 210.5 MB
NeoSSHWinManager-cli.exe 29.7 MB
  • Die Nutzung der Update-Funktion ist nun Teil der Opt-In-Telemetrie. Benutzer, die der Telemetrie zugestimmt haben, übermitteln zusätzliche Informationen darüber, ob sie die Update-Funktion nutzen, wie sie darauf zugreifen und ob tatsächlich ein Update durchgeführt wurde: updatecheck (mit source=startup|settings und result=available|uptodate|failed), updateaction (welcher Button gedrückt wurde: Download, Browser, Later, Install Now, Enable/Disable for next start), updatedownload (ok|failed) und updateresult. Zu jedem Event gehört auch die aktuell laufende Version. Es werden keine neuen personenbezogenen Daten erhoben; Die Ereignisse fungieren als Zähler ohne identifizierende Markierungen und die gesamte Übertragung unterliegt weiterhin der Einstellung telemetry_enabled.
  • Ob ein Update tatsächlich erfolgreich war, kann im laufenden Prozess nicht festgestellt werden: Der Installer gibt keine Rückmeldung und führt die Installation erst nach dem Beenden der Anwendung durch. Daher erstellt launchpendinginstaller() neben der Markierung für ausstehende Updates eine Datei mit dem Namen updateattempt.json. Beim nächsten Start wird die laufende Version mit der aufgezeichneten Zielversion verglichen: Das Ergebnis wird installiert, wenn sie übereinstimmen, und nicht installiert, wenn die Installation abgebrochen wurde oder fehlgeschlagen ist. Einträge, die älter als eine Woche sind, werden ohne Analyse verworfen und nicht für den falschen Tag in die Statistik aufgenommen.
  • Das automatische Update wird jetzt über das Windows-Installationsprogramm installiert, anstatt die Exe-Datei auszutauschen. Die Update-Überprüfung lädt die Setup.exe der Version (nie wieder die tragbare Exe) in %APPDATA%\SSHWinManager\updates herunter und speichert sie in pending_update.json. Wenn das Update aktiviert ist, übergibt der nächste Programmstart an ein Hilfsskript, das auf das Beenden der App wartet, das Installationsprogramm ausführt und die App anschließend erneut startet – unabhängig davon, ob das Installationsprogramm abgeschlossen oder abgebrochen wurde. Dadurch wird sichergestellt, dass das Update tatsächlich angewendet wird und die Registrierungseinträge, Verknüpfungen und Deinstallationsinformationen der installierten Kopie synchron bleiben.
  • Versionen enthalten jetzt ein sha256sums.txt-Asset, sodass die SHA-256-Überprüfung, die der Updater immer versucht hat, tatsächlich ausgeführt wird – ein heruntergeladenes Installationsprogramm, dessen Hash nicht übereinstimmt, wird verworfen statt installiert.
  • Der Update-Dialog bietet nun „Update beim nächsten Programmstart installieren“ (eine jederzeit umschaltbare Checkbox) und „Jetzt neu starten und installieren“ an. Eine laufende Update-Prüfung meldet auch ein Installationsprogramm, das bereits zuvor heruntergeladen wurde, sodass ein abgelehntes Update später ohne erneuten Download aktiviert werden kann – auch wenn die App offline ist und die GitHub-Prüfung fehlschlägt.
  • Die automatische Aktualisierung hat im Stillen nichts bewirkt; Die alte Version startete immer wieder. Die Einstellungsbildschirme riefen sofort nach Abschluss des Downloads installonexit() auf, nicht beim Beenden: Das generierte Batch-Skript wartete 3 Sekunden und versuchte dann, die laufende ausführbare Datei zu löschen, was Windows ablehnte. Auch der anschließende Umzug schlug fehl, sodass die alte Exe einfach neu gestartet wurde. Jeder Schritt wurde deaktiviert und seine Ausgabe verworfen, sodass nichts protokolliert oder angezeigt wurde. Darüber hinaus befindet sich eine installierte Kopie normalerweise in einem Verzeichnis, in das der Benutzer überhaupt nicht schreiben darf, und die Pfadvalidierung wird verwendet, um völlig normale Pfade (alles, was (, ) oder ~ enthält, z. B. C:\Programme (x86)\…) ohne für den Benutzer sichtbare Fehler abzulehnen. Der gesamte Exe-Swap-Mechanismus ist weg – siehe oben.
  • Bei der Update-Prüfung wurde das portable Release-Asset NeoSSHWinManager.exe ausgewählt, sodass selbst bei einem erfolgreichen Austausch eine installierte Kopie übrig blieb, die unter der alten Version registriert war. Es sucht nun nach dem Setup-Asset und greift auf die Release-Seite im Browser zurück, wenn ein Release keines bereitstellt.
Datei Größe
NeoSSHWinManager.exe 180.5 MB
NeoSSHWinManager-Setup-1.5.4.exe 210.1 MB
NeoSSHWinManager-cli.exe 29.5 MB
  • Startabsturz bei defekten/verwaisten ACLs: setsecure_permissions() stürzt die App nicht mehr ab, wenn die DACL selbst nicht gelesen werden kann (z. B. übrig gebliebene defekte Berechtigungen aus einer älteren Installation) – wird stattdessen zu einer protokollierten Warnung degradiert, die dem Verhalten des Schreibschritts entspricht.
  • Die Pro-Aktivierung schlug immer mit einem Netzwerkfehler fehl: Der Validierungsendpunkt zeigte auf die Apex-Domäne, die auf www umleitet. und lässt dabei den POST-Körper stillschweigend fallen. Jetzt zeigt auf www. direkt.
Datei Größe
NeoSSHWinManager.exe 180.5 MB
NeoSSHWinManager-Setup-1.5.2.exe 210 MB
NeoSSHWinManager-cli.exe 29.5 MB
  • Windows-Installationsprogramm (installer/NeoSSHWinManager.iss, erstellt mit Inno Setup 6): eine richtige Setup.exe neben den vorhandenen eigenständigen ausführbaren Dateien, mit einem Setup-Assistenten, der eine Desktop-Verknüpfung und „Start mit Windows“-Aufgaben bietet, einer optionalen CLI-Komponente (NeoSSHWinManager-cli.exe kann über eine Kompaktinstallation ausgeschlossen werden) und einer Seite mit App-Einstellungen, um vor dem ersten Start die Sprache und das Dunkel-/Hell-Design der Anwendung vorab auszuwählen. Die eigene Benutzeroberfläche des Installers ist in Englisch, Deutsch, Spanisch, Russisch und Niederländisch verfügbar. Im Assistenten ausgewählte Einstellungen werden in install_prefs.json geschrieben und von AuthManager.register() angewendet, wenn das erste lokale Benutzerkonto erstellt wird, anstelle der fest codierten en/dark-Standardeinstellungen.
  • Ausführbare CLI-Begleitdatei wiederhergestellt: NeoSSHWinManager-cli.exe (Konsolensubsystem, climain.py) ist wieder im Build (NeoSSHWinManager-cli.spec, builddual.ps1), nachdem es in 1.5.1 aus der Distribution entfernt wurde. Ermöglicht den nicht-interaktiven Zugriff auf eine gespeicherte Verbindung mit aktiviertem CLI-Zugriff über NeoSSHWinManager-cli.exe --connect-cli ACCESS_KEY [--exec "command"], während die Haupt-GUI ausgeführt und angemeldet ist. Der eigene Build der GUI bleibt eine eigenständige ausführbare One-File-Datei, die davon nicht betroffen ist.
  • FTP- und FTPS-Unterstützung: Verbindungen übertragen jetzt ein Protokoll (SFTP / FTPS / FTP). Der Dateibrowser spricht alle drei – die neue src/ftp_client.py implementiert FTP über ftplib mit explizitem TLS (AUTH TLS, Port 21), implizitem TLS (Port 990) und einfachem unverschlüsseltem FTP, MLSD-Auflistungen mit einem LIST-Fallback für ältere Server, passivem/aktivem Modus, Fortschrittsberichten bei Up- und Downloads und automatischer Neuanmeldung nach einer Leerlauf-Zeitüberschreitung.
  • Das Formular „Hinzufügen/Bearbeiten“ verfügt über eine Protokollauswahl sowie FTP-Optionen (implizites TLS, passiver Modus, Zertifikatsüberprüfung); Der Port folgt dem Protokollstandard (22/21/990), sofern kein benutzerdefinierter Port eingegeben wurde und nur SSH-Felder (Schlüsseldatei, Laufwerksbuchstabe, CLI-Zugriff, PuTTY-Schlüssel) für FTP-Verbindungen ausgeblendet sind.
  • Einfache FTP-Verbindungen können über das Kontextmenü der Karte an den integrierten Windows Explorer-FTP-Client übergeben werden (das Passwort bleibt aus der URL entfernt – Explorer fragt danach).
  • FTP/FTPS-Verbindungen können nicht als Laufwerk gemountet werden und haben kein SSH-Terminal: Ihre Karte zeigt ein Protokoll-Badge an und öffnet den Dateibrowser, und Mount-/Terminal-/Systeminfo-Aktionen melden, dass sie nicht verfügbar sind, anstatt später fehlzuschlagen.
  • Datenbankmigrationen führen jetzt jede ALTER TABLE unabhängig aus, sodass eine Spalte, die SQLite ablehnt (z. B. das Hinzufügen einer UNIQUE-Spalte zu einer alten Tabelle), nicht mehr stillschweigend jede darauf folgende Migration überspringt.
  • SSHFS-Schreibbeschädigung: Dateien könnten nach dem Schreiben/Überschreiben über ein bereitgestelltes Laufwerk als reine NUL-Bytes enden. Verursacht durch FileInfoTimeout=-1, wodurch das Zurückschreiben-Dateidaten-Caching von WinFsp aktiviert wird; Eine hart beendete sshfs.exe (z. B. beim Unmounten) könnte noch nicht geleerte Seiten löschen und die serverseitige Nullfüllung beibehalten. Mounts verwenden jetzt stattdessen ein endliches FileInfoTimeout, synchrone SFTP-Schreibvorgänge (sshfssync) und deaktiviertes Vorauslesen (noreadahead).
  • Neue Ordner/Dateien sind bis zur Aktualisierung unsichtbar: sshfs.exe verfügt über einen eigenen Verzeichniseintragscache (dircache/dcachedir_timeout, Standard 20 Sekunden), der vollständig von den WinFsp-seitigen Cache-Timeouts getrennt ist und darunter liegt, die diese App bereits festlegt, sodass die vorhandene Einstellung „Verzeichniscache deaktivieren“ nie vollständig angewendet wird. Mounts optimieren jetzt auch den sshfs-seitigen Cache (vollständig deaktiviert, wenn diese Einstellung aktiviert ist, andernfalls verschärft, um mit der Einstellung übereinzustimmen).
  • „Neuer Ordner“/neue Datei wurde stillschweigend viermal im Explorer dupliziert: Auf einem gemounteten Laufwerk konnte das Erstellen eines Elements im Windows Explorer scheinbar fehlschlagen (keine Aufforderung zum Umbenennen) und dann nach einer manuellen Aktualisierung bis zu viermal angezeigt werden. Die Hauptursache ist eine Nichtübereinstimmung des Upstream-WinFsp/Windows-Sicherheitstokens (TokenUser vs. TokenOwner), die sich nur auf das integrierte Administratorkonto auswirkt, wenn der UAC-Administratorgenehmigungsmodus dafür deaktiviert ist (Windows-Standardeinstellung für dieses Konto) – nicht über die Bereitstellungsoptionen der App behebbar. Dokumentiert für alle anderen, die darauf zugreifen: Aktivieren Sie „Benutzerkontensteuerung: Administratorgenehmigungsmodus für das integrierte Administratorkonto“ (secpol.msc oder FilterAdministratorToken=1) und melden Sie sich erneut an.
  • Startabsturz nach Behebung des oben genannten Konto-Token-Problems: Dateien, die zuvor unter dem betroffenen Konto erstellt wurden, gehören letztendlich der Gruppe BUILTIN\Administrators und nicht dem Benutzer; Sobald das Token dieses Kontos die Gruppe nicht mehr trägt, begann die eigene Berechtigungshärtung der App (SetFileSecurity) zu scheitern, der Zugriff wurde verweigert und der Start stürzte ab. Bei diesem Aufruf handelt es sich jetzt um einen Best-Effort-Aufruf (protokolliert eine Warnung statt eines Absturzes), und die App erkennt nun genau diese Eigentumskonflikte beim Start selbstständig und bietet eine einmalige, UAC-erweiterte automatische Reparatur (src/permission_repair.py) an – sodass jeder, der nach einem Update oder einer Neuinstallation darauf stößt, eine geführte Fehlerbehebung anstelle eines Absturzes erhält.
  • Der CLI-Zugriffsschlüssel konnte für keine Verbindung übereinstimmen: getbyclikey() verschlüsselte den eingehenden Schlüssel erneut mit einem neuen zufälligen AES-GCM-IV und verglich das Ergebnis mit dem gespeicherten Chiffretext – der einen anderen zufälligen IV als bei der ursprünglichen Speicherung des Schlüssels verwendet, sodass der Vergleich selbst für den richtigen Schlüssel nie erfolgreich sein konnte. Lookup verwendet jetzt stattdessen einen deterministischen cliaccesskeyhash (SHA-256 des Klartextschlüssels); Bei bestehenden Verbindungen wird dieser Hash bei der nächsten Anmeldung automatisch aufgefüllt.
  • CLI-SSH-Verbindungen wurden immer abgelehnt: launchsshincurrentterminal() (verwendet von --connect-cli) legte eine RejectPolicy-Hostschlüsselrichtlinie fest, lud jedoch nie zuerst bekannte Hosts in Paramiko, sodass jede Verbindung als „unbekannter Host“ abgelehnt wurde, unabhängig davon, was auf der Festplatte bereits vertrauenswürdig war. Lädt nun dieselbe Knownhosts-Datei, die der Rest der App verwendet, bevor die Richtlinie überprüft wird.
  • Das eingebettete Terminal hat das gesamte Fenster beim Herstellen der Verbindung eingefroren: Öffnen einer SSH-Sitzung im integrierten xterm.js-Terminal (Terminalclient-Einstellung = „xterm“) namens TerminalBridgeServer.createsession_token() – das einen blockierenden paramiko.SSHClient.connect() ausführt – direkt im Qt-Hauptthread. Ein langsamer oder nicht reagierender Host könnte die gesamte Benutzeroberfläche für die Dauer des Authentifizierungs-Timeouts von Paramiko (standardmäßig 30 Sekunden) zusätzlich zum Verbindungs-Timeout einfrieren. Der Verbindungsaufbau wird jetzt in einem TerminalConnectWorker im Hintergrund (src/ui/worker.py) ausgeführt, der dem vorhandenen MountWorker/UnmountWorker-Muster entspricht. Die Registerkarte wird erst erstellt, wenn die SSH-Sitzung tatsächlich aktiv ist.
  • Der CLI-Zugriff über --connect-cli funktioniert jetzt auch für passwortauthentifizierte Verbindungen: Die lokale IPC-Antwort enthält das Passwort (bisher aufgrund einer früheren Feststellung zurückgehalten). Die Pipe war bereits auf die SID des aktuellen Benutzers beschränkt (makepipesecurityattributes), der 64-Byte-Zugriffsschlüssel selbst ist ein starkes Trägergeheimnis und Anfragen sind bereits pro PID ratenbegrenzt – das Senden des Passworts über diesen bereits eingeschränkten Kanal war das fehlende Teil für eine CLI-Funktion, deren einziger Zweck der unbeaufsichtigte Zugriff auf gespeicherte Verbindungen ist und nicht eine zusätzliche Gefährdung.
Datei Größe
NeoSSHWinManager.exe 180.5 MB
NeoSSHWinManager-Setup-1.5.2.exe 210 MB
NeoSSHWinManager-cli.exe 29.5 MB
  • Integriertes In-App-Terminal: Neues xterm.js-basiertes SSH-Terminal, das direkt in die App eingebettet ist (über QWebEngineView/QWebChannel, überbrückt mit einem lokalen WebSocket-Server), auswählbar in den Einstellungen neben den vorhandenen externen SSH/PuTTY-Launchern. Unterstützt mehrere gleichzeitige Sitzungen pro Verbindung mit einer Registerkartenleiste, Hintergrundpersistenz beim Wechseln von Bedienfeldern und einer Schaltfläche zum erneuten Verbinden nach der Trennung.
  • Nativer SFTP-Browser: Neues Dateibrowserfenster (src/ui/sftp_browser.py), das über die Verbindungskarte erreichbar ist, sobald ein Host gemountet ist – Verzeichnisnavigation, Upload/Download mit Fortschritt, Umbenennen, Löschen und Neuer Ordner, alles wird über dedizierte Worker-Threads vom UI-Thread ausgeführt.
  • Pro-Lizenzsystem: Maschinenbasierte Aktivierung (src/pro_manager.py) mit einer offline, HMAC-verifizierten Lizenzprüfung und einem neuen Abschnitt „Pro-Lizenz“ in den Einstellungen. Das kostenlose Kontingent ist auf drei gleichzeitige Sitzungen mit integriertem Terminal begrenzt. Bei Überschreitung wird eine Upgrade-Eingabeaufforderung angezeigt.
  • Verbindungsvorlagen und Erkennung doppelter Namen: Das Dialogfeld „Hinzufügen/Bearbeiten“ verfügt über ein Vorlagen-Dropdown-Menü (Speichern/Anwenden/Löschen) und blockiert jetzt doppelte Verbindungs-/Vorlagennamen, indem automatisch eine eindeutige Alternative vorgeschlagen wird.
  • Kontextmenü der Verbindungskarte: Klicken Sie mit der rechten Maustaste auf das Menü zum Mounten/Unmounten, öffnen Sie es im Explorer, öffnen Sie den SFTP-Browser und stellen Sie eine Verbindung über OpenSSH/PuTTY/integriertes Terminal her.
  • Bestätigungsdialog zum Abmelden: Wählen Sie zwischen angemeldet bleiben, beenden, während die Laufwerke gemountet bleiben, oder beenden und alles aushängen.
  • Prüfung der Startvoraussetzungen: Blockiert den Start mit Download-Links, wenn WinFsp und/oder SSHFS-Win nicht installiert sind.
  • Einstellungen: Neuer Terminal-Backend-Selektor (SSH/PuTTY/integriertes xterm) und ein Schalter zum Deaktivieren des SSHFS-Attribut-/Verzeichnis-Cachings für Hosts, bei denen veraltete Cache-Daten ein Problem darstellen.
  • Neuer Release-Build-Workflow von GitHub Actions und ein nächtliches Versions-/Push-Hilfsskript für den Release-Prozess.
  • Die SSH-Schaltfläche der Verbindungskarte öffnet jetzt das integrierte Terminal, wenn dieses Backend in den Einstellungen ausgewählt wird, und greift andernfalls auf den externen Client zurück; „Open Mounted Path“ öffnet jetzt den neuen SFTP-Browser anstelle des Systemdatei-Explorers direkt.
  • Neugestaltung der Titelleiste mit einem einheitlichen Erscheinungsbild, passend zum ausgewählten Dunkel/Hell-Thema; Akzentfarbe appweit aktualisiert (#00b4d8 → #0077b6).
  • SSHFS-Mounts legen jetzt explizite WinFsp-Attribut-/Verzeichnis-/Volume-Info-Cache-Timeouts fest (die bei deaktiviertem Caching weiter verschärft werden) und das Aufheben der Bereitstellung führt dazu, dass ein hängengebliebener sshfs.exe-Prozess nach einer Kulanzfrist von 10 Sekunden zwangsweise beendet wird.
  • Die passwortbasierte SSH_ASKPASS-Härtung (einmaliges IPC-Token anstelle einer Klartext-Umgebungsvariable) gilt jetzt ab Sicherheitsstufe 1, anstatt Stufe 2 zu erfordern, sowohl für den nativen SSH-Launcher als auch für PuTTY.
  • „Beenden“ in der Taskleiste durchläuft jetzt denselben Bestätigungsablauf für die Mount-Bereinigung/Abmeldung wie das Hauptfenster, anstatt QApplication.quit() direkt aufzurufen.
  • Die Handhabung des rahmenlosen Fenstergrößenänderungscursors funktioniert jetzt ordnungsgemäß, wenn sich die Maus über untergeordneten Widgets und nicht nur über dem Fensterrahmen selbst befindet.
  • Build: Ausführbare CLI-Begleitdatei aus build_dual.ps1 entfernt (zukünftig nur GUI-Verteilung); Der PyInstaller-Build entfernt jetzt Symbole und schließt nicht verwendete stdlib-Module (tkinter, unittest, pytest usw.) aus, um die Größe der ausführbaren Datei zu reduzieren.
  • getuserby_username wählt nicht mehr sensible Spalten (Passwort-Hash/Salt, verschlüsselter Schlüssel) aus, die es nicht benötigt, wodurch die versehentliche Offenlegung von Anmeldedaten im Speicher reduziert wird.
  • Nur-Administrator-Kontovorgänge (Zurücksetzen des Passworts, Löschen von Benutzern, Auflisten von Benutzern) erzwingen jetzt die Autorisierung auf der auth_manager-Ebene, anstatt sich ausschließlich auf das Gating auf UI-Ebene zu verlassen.
  • Die Zeitgeber für die Anmeldesperre wurden von monoton auf Wanduhrzeit umgestellt, sodass eine Sperre nicht mehr durch einen Neustart der App umgangen werden kann.
  • Der Updater validiert ausführbare Dateipfade/Update-Dateipfade, bevor er sie in sein Selbstersetzungsskript einbettet, und überprüft nun eine SHA-256-Prüfsumme des heruntergeladenen Updates, bevor er es anwendet (fällt auf eine Warnung zurück, wenn die Version keine Prüfsumme bereitstellt).
  • Telemetrie-Aktionsparameter werden jetzt vor dem Senden URL-codiert, wodurch ein Randfall der Parameterinjektion in der Abfragezeichenfolge geschlossen wird.
  • Terminal- und SFTP-Sitzungen verwenden ablaufende Sitzungstoken zur einmaligen Verwendung, löschen Kennwörter sofort nach der Verwendung aus dem Speicher und binden den lokalen Bridge-Server nur an Loopback; Beide Funktionen verwenden denselben TOFU-Hostschlüssel-Überprüfungs- und Bestätigungsdialog, der an anderer Stelle in der App verwendet wird.
  • Das Pro-Lizenzvalidierungsgeheimnis (neoprovalidate.php) ist aus dem Repository ausgeschlossen.
Datei Größe
NeoSSHWinManager.exe 173.2 MB
  • Verbindungsgruppen/Tags und wiederverwendbare Vorlagen im gesamten Datenmodell, Datenbankmigration, Hinzufügen/Bearbeiten von Abläufen und Übersetzungen
  • Massen-Mount-/Dismount-Aktionen und ein Gruppenfilter im Hauptverbindungsheader
  • Spezielles Profilfenster, in dem Endbenutzer ihr Konto überprüfen und ihr Passwort ändern können
  • Das manuelle GitHub-Update überprüft den Download-Fortschritt und einen Install-on-Exit-Ablauf
  • Telemetrie-Opt-in-Eingabeaufforderung, persistente Telemetrieeinstellungen und asynchrone Telemetrieübermittlung
  • Das Hauptfenster, der Einstellungsbildschirm und die Formulare im rechten Bedienfeld wurden für das Layout der Version 1.5.0 überarbeitet
  • Verbindungskarten zeigen jetzt Gruppeninformationen und kompakte Hostdetails mit dem Laufwerksbuchstaben im Untertitel an
  • Verbindungsflüsse hinzufügen/bearbeiten unterstützen jetzt explizit Vorlagen und Oberflächengruppenmetadaten in der Benutzeroberfläche
  • Viele native Meldungsfelder wurden durch einen themenbezogenen benutzerdefinierten Dialog für Warnungen, Bestätigungen und Erfolgsmeldungen ersetzt
  • Angeheftete Kern-Python-Abhängigkeitsversionen für die Versionsumgebung 1.5.0
  • Die sichtbaren Zeichenfolgen der Anwendungsversion im Hauptfenster wurden aktualisiert, zum Dialog und zum Einzelinstanz-Mutex
  • Reduzierte Debug-Protokollierung sensibler Befehlszeilenargumente im PuTTY-Launcher
  • Gehärtete In-Memory-Verarbeitung von temporären Passwort-Tokens, die von SSH ASKPASS verwendet werden
  • Gehärteter SSH_ASKPASS-Passwortaustausch durch Ersetzen der Klartext-Umgebungsübertragung durch einmalige IPC-Tokens
  • Entspanntere Handhabung des Host-Schlüssels beim ersten Kontakt mit OpenSSH-Akzeptanz für SSH- und Sysinfo-Flows unter Beibehaltung von Host-Änderungsfehlern
  • Die Mindestlänge des Passworts wurde bei Registrierungs- und Benutzerverwaltungsabläufen von 6 auf 8 Zeichen erhöht
  • Eingeschränkte Berechtigungen für Absturzberichtsdateien, sodass Stack-Traces nicht mehr weltweit lesbar sind
  • Maskierte PuTTY-Passwortargumente in Debug-Protokollen, um den Verlust von Anmeldeinformationen zu verhindern
  • Passwort-Fallback hinzugefügt, wenn ein gespeicherter SSH-Schlüssel fehlschlägt, aber noch ein Passwort für dieselbe Verbindung verfügbar ist
  • Einheitliche destruktive Bestätigungsaufforderungen und Handhabung schmutziger Formulare über die gestaltete Dialogebene
  • Mehrere in der 1.5.0-Benutzeroberfläche verwendete deutsche Übersetzungszeichenfolgen und Speicherbezeichnungsschreibweisen wurden korrigiert
Datei Größe
NeoSSHWinManager.exe 46 MB
NeoSSHWinManager-cli.exe 28.2 MB
  • Absturz beim Klicken auf einen gemounteten Host (NameError: conn_id nicht in Infopanel-Lambdas definiert)
  • Die Schaltfläche „Kopieren“ in Fehlerdialogen funktioniert nicht
  • Der Ladestatus wird nicht gelöscht, wenn der Dialog „Passwort fragen“ abgebrochen wird
  • Bearbeitungsmodus: Abschnittsüberschriften im Vergleich zum Infobereich zu fett
  • Bearbeitungsmodus: Passwortpunkte unverhältnismäßig groß
  • Infofeld: Laufwerkskennzeichen durch Ordner-SVG-Symbol ersetzt, nur sichtbar, wenn der Host gemountet ist
  • Der Bearbeitungsmodus stimmt jetzt mit der Feldreihenfolge im Infobereich, der Containerstruktur und den Abschnittsbeschriftungen überein
  • Für visuelle Kontinuität wird oben im Bearbeitungsmodus das Statusabzeichen (angeschlossenes/nicht angeschlossenes Tablet) angezeigt
  • Schaltfläche „Speichern“: Das Diskettensymbol ersetzt das Häkchen
  • Heller Modus: Die Schaltfläche „Speichern“ erhält einen dezenten grünen Hintergrund; Das Löschsymbol ist für einen besseren Kontrast durchgehend rot
Datei Größe
NeoSSHWinManager.exe 45.7 MB
NeoSSHWinManager-cli.exe 27.8 MB
  • Umfassende Sicherheitsüberprüfung: Gehärtete Speicherung von Anmeldeinformationen, Sitzungsverarbeitung, Verschlüsselungsroutinen und Schlüsselableitung für Authmanager, Krypto, Datenbank, SSHLauncher und SSHFS_Controller
  • CWE-312 · Verbindungsmetadatenverschlüsselung: Host, Benutzername, Verbindungsname und Remote-Pfad werden jetzt mit AES-256-GCM verschlüsselt, bevor sie in der Datenbank gespeichert werden. Vorhandene Einträge werden beim ersten Login automatisch migriert.
  • CWE-732 · Windows ACL gehärtet: win32security ist jetzt ein harter Import auf Modulebene – eine fehlende pywin32-Installation löst beim Start einen expliziten ImportError aus, anstatt die Datenbankdatei allgemein lesbar zu machen.
  • CWE-307 · Brute-Force-Schutz: Die Anzahl der Anmeldeversuche ist jetzt pro Benutzername begrenzt. Nach 5 aufeinanderfolgenden Fehlern wird das Konto für 30 Sekunden gesperrt; Jeder weitere Block eskaliert (10 Versuche → 10 Minuten, 5 → 1 Stunde und mehr).
  • CWE-362 · Session Race Condition behoben: Session.currentuser ist durch einen threading.RLock geschützt; enc_key-Aktualisierungen nach Passwortänderungen werden atomar durchgeführt.
  • CWE-591 · Memory-Lock-Fehler jetzt sichtbar: mlockmemory() / munlockmemory() geben jetzt bei einem Fehler einen WARNUNG-Protokolleintrag aus, anstatt stillschweigend False zurückzugeben.
  • CWE-214 · CLI-Schlüssel über stdin: --connect-cli – liest den Zugriffsschlüssel von stdin und verhindert so die Offenlegung in Prozesslisten und im Shell-Verlauf.
  • CWE-78 · Shell-Injection-Verhinderung: Unsichere Shell-Interpolation im sshlauncher entfernt; issafelabel() im sshfscontroller hinzugefügt. Das SSH-Terminal wird jetzt über cmd.exe + CREATENEW_CONSOLE anstelle von Shell=True gestartet.
  • Migration von CLI-Schlüsseln: Klartext-CLI-Zugriffsschlüssel werden bei der ersten Anmeldung nach dem Update automatisch verschlüsselt.
  • SSHASKPASS für die Passwortauthentifizierung: Passwörter werden über den SSHASKPASS-Mechanismus übergeben – niemals in der Prozessliste angezeigt.
  • Validierung des Verbindungsnamens: Namen, die Shell-Metazeichen enthalten, werden vor dem Einfügen in die Datenbank abgelehnt.
  • MITM Fix (Auslassung in Version 1.3.1 korrigiert): StrictHostKeyChecking=yes wurde bereits in Version 1.3.1 angewendet, aber nicht dokumentiert. Installationen mit Version 1.3.0 oder früher sind anfällig – führen Sie sofort ein Upgrade durch.
  • PuTTY PPK-Integration: Automatische Erkennung und konfigurierbarer PPK-Schlüsselpfad für PuTTY-basierte Verbindungen
  • Verbesserungen des nativen SSH-Terminals: Überarbeitete Terminal-Startlogik für PuTTY und natives OpenSSH
  • SysInfo mit Schlüssel oder Passwort verfügbar: Systeminformationen werden immer dann abgerufen, wenn ein SSH-Schlüssel oder ein gespeichertes Passwort konfiguriert wird – die Einstellung der Sicherheitsstufe sperrt den Sysinfo-Zugriff nicht mehr.
  • SysInfo-Authentifizierungsüberlagerung: Anstelle eines allgemeinen Fehlers wird eine klare Überlagerung angezeigt, wenn weder Schlüssel noch Kennwort konfiguriert sind.
  • Countdown zur Anmeldesperre: Nach einer Sperrung über die Klassengrenze hinweg zeigt das Anmeldeformular einen Live-Countdown mit der für Menschen lesbaren verbleibenden Zeit an.
  • Anmeldeschaltfläche bei Eingabe gesperrt: Die Anmeldeschaltfläche ist deaktiviert, bis sowohl Benutzername als auch Kennwort (jeweils ≥ 1 Zeichen) ausgefüllt sind.
  • Über Dialog Redesign: Kartenlayout mit gruppierten anklickbaren Linkschaltflächen für Projekt-, Dokumentations-, GitHub- und Autorenlinks
  • Schaltfläche „Info“ in der Seitenleiste: Persistente Schaltfläche „Info“ in der Seitenleiste
  • SSHFS-Massentrennungsfehler: Es wurde eine Race-Bedingung in sshfs_controller behoben, die dazu führte, dass alle gemounteten Laufwerke gleichzeitig getrennt wurden
  • Absturz beim Aufheben der Bereitstellung des Laufwerks: Ein Absturz wurde verhindert, wenn die Bereitstellung eines Laufwerks aufgehoben wurde, während die Benutzeroberfläche noch einen Verweis darauf enthielt (#1).
  • QMessageBox Dark Mode: Hintergrundfarbe von Nachrichtenboxen im Dark Mode korrigiert (#3)
  • F2-Absturz bei nicht standardmäßigen Widgets: Absturz beim Drücken von F2 bei nicht standardmäßigen Widgets verhindert (#4)
  • Verhalten beim Scrollen von Formularen: Das Scrollen im Dialogfeld „Verbindung hinzufügen/bearbeiten“ auf kleineren Bildschirmen wurde korrigiert
  • Absturzberichtspfad: Absturzberichte werden jetzt in %APPDATA%\SSHWinManager\crash_report.txt geschrieben
  • Weitergabe von Worker-Thread-Fehlern: Mount-/Unmount-Worker-Threads fangen jetzt Ausnahmen ab und geben einen MountResult-Fehler aus, anstatt stillschweigend abzustürzen
Datei Größe
NeoSSHWinManager.exe 45.7 MB
NeoSSHWinManager-cli.exe 27.9 MB
  • Agent-CLI-Key im Verbindungseditor direkt sichtbar statt maskiert.
  • Zwei sichtbare SVG-Aktionen für CLI-Key eingeführt: kopieren und neu generieren.
  • Copy-Feedback im Editor per Check-Icon ergänzt.
  • Versions- und Website-Metadaten auf 1.3.1 angehoben.
Datei Größe
NeoSSHWinManager.exe 42.9 MB
NeoSSHWinManager-cli.exe 27.8 MB
  • Einstellungen und Benutzerverwaltung als Vollbild-Panel via QStackedWidget
  • Sidebar-Navigation mit Hervorhebung des aktiven Eintrags
  • [i]-Schaltfläche öffnet ausschließlich das SSH-Live-Systeminfo-Panel
  • Bearbeiten-Schaltfläche immer sichtbar, deaktiviert wenn Verbindung eingehängt
  • Primäre Schaltflächen: Verlauf #00b4d8 → #0077b6, schwarzer Text
  • Titelleistenfarbe passt sich dem aktiven Design via DwmSetWindowAttribute (Windows 11+) an
  • Checkbox-Indikator: 14×14 px, weißer Haken auf türkisem Hintergrund
  • Panel-Header: 52 px Höhe, Kicker-Labels entfernt, Titel vertikal zentriert
  • Listenansicht mit 4-px-Farbbalken für CPU/RAM/Festplatte
  • Vollständige statische Website in website/ (Landing, Features, Docs, Changelog, Download)
  • Interaktive Browser-Simulation (website/app.html) in reinem HTML/CSS/JS
  • Keine Installation nötig, direkt über GitHub Pages bereitstellbar
  • Veraltetes credential_store.py entfernt
  • AppUserModelID-Präfix von dennis. auf neo. geändert
  • Versionserhöhung auf 1.3.0
Datei Größe
NeoSSHWinManager.exe 42.9 MB
NeoSSHWinManager-cli.exe 27.8 MB
  • Fügen Sie dauerhafte Unterstützung für helle/dunkle Designs hinzu.
  • Fügen Sie den Authentifizierungsmodus „Jedes Mal fragen“ für Verbindungen hinzu.
  • Verbessern Sie das Klickverhalten der Verbindungskarte bei der Montage.
  • Anwendungssymbole für Anmelde- und Hauptfenster korrigiert.
  • Aktualisieren Sie die Anwendungs- und Windows-Metadaten auf 1.2.0.
Datei Größe
NeoSSHWinManager.exe 42.7 MB
NeoSSHWinManager-cli.exe 27.7 MB