Add encrypted LAN sync between MrTerm devices: UDP discovery, X25519 pairing with short authentication code, mutually authenticated AES-256-GCM sessions, last-writer-wins merge with deletions, and per-item opt-in for SSH keys, passwords and VPN configurations

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-25 23:05:39 +02:00
co-authored by Claude Opus 5.5
parent ae5309f693
commit 41717b2d07
8 changed files with 694 additions and 11 deletions
+42
View File
@@ -543,6 +543,48 @@
'A static IPv6 configuration needs at least one IPv6 address.': 'Eine statische IPv6-Konfiguration braucht mindestens eine IPv6-Adresse.',
'Authentication failed for {user}. Check the username, password or key.': 'Anmeldung für {user} fehlgeschlagen. Prüfe Benutzername, Passwort oder Schlüssel.',
// Synchronisation
'Synchronization': 'Synchronisation',
'Synchronize hosts, groups, snippets, port forwards, VPNs and known hosts directly between MrTerm devices in your local network. The connection is end-to-end encrypted; no server or cloud is involved.': 'Hosts, Gruppen, Snippets, Port-Weiterleitungen, VPNs und Known Hosts direkt zwischen MrTerm-Geräten im lokalen Netz abgleichen. Die Verbindung ist Ende-zu-Ende verschlüsselt, ohne Server oder Cloud.',
'Enable LAN synchronization': 'LAN-Synchronisation aktivieren',
'Device name': 'Gerätename',
'No paired devices yet.': 'Noch keine gekoppelten Geräte.',
'online': 'online',
'offline': 'offline',
'last sync {time}': 'zuletzt {time}',
'Unpair': 'Entkoppeln',
'Unpair device?': 'Gerät entkoppeln?',
'“{name}” will no longer synchronize with this device.': '„{name}“ synchronisiert dann nicht mehr mit diesem Gerät.',
'Shared secrets: {keys} SSH keys, {pw} host passwords, {vpn} VPN configurations': 'Geteilte Geheimnisse: {keys} SSH-Schlüssel, {pw} Host-Passwörter, {vpn} VPN-Konfigurationen',
'Pair new device': 'Neues Gerät koppeln',
'Sync now': 'Jetzt synchronisieren',
'Synchronized with {n} device(s)': 'Mit {n} Gerät(en) synchronisiert',
'Choose shared secrets': 'Geteilte Geheimnisse auswählen',
'Devices find each other via UDP port 47811 and synchronize via TCP port 47812. If a firewall is active, allow these ports in your local network (with UFW: sudo ufw allow 47811/udp and sudo ufw allow 47812/tcp).': 'Geräte finden sich über UDP-Port 47811 und synchronisieren über TCP-Port 47812. Ist eine Firewall aktiv, erlaube diese Ports im lokalen Netz (mit UFW: sudo ufw allow 47811/udp und sudo ufw allow 47812/tcp).',
'Open “Pair new device” on the other device too, then select it here. Both devices show a code that you confirm on both sides.': 'Öffne „Neues Gerät koppeln“ auch auf dem anderen Gerät und wähle es dann hier aus. Beide Geräte zeigen einen Code, den du auf beiden Seiten bestätigst.',
'Or enter an IP address, e.g. 192.168.0.25': 'Oder IP-Adresse eingeben, z. B. 192.168.0.25',
'Searching for devices …': 'Suche nach Geräten …',
'not ready for pairing': 'nicht bereit zum Koppeln',
'Pair': 'Koppeln',
'Pairing …': 'Kopple …',
'Device found': 'Gerät gefunden',
'Choose which secrets this device may send to paired devices. Everything else (hosts, groups, snippets …) is synchronized without passwords and private keys.': 'Wähle, welche Geheimnisse dieses Gerät an gekoppelte Geräte senden darf. Alles andere (Hosts, Gruppen, Snippets …) wird ohne Passwörter und private Schlüssel synchronisiert.',
'SSH keys': 'SSH-Schlüssel',
'Host passwords': 'Host-Passwörter',
'VPN configurations': 'VPN-Konfigurationen',
'There are no secrets on this device yet.': 'Auf diesem Gerät gibt es noch keine Geheimnisse.',
'Share nothing': 'Nichts teilen',
'Select all': 'Alle auswählen',
'Paired with {name}': 'Mit {name} gekoppelt',
'Confirm pairing': 'Kopplung bestätigen',
'Pairing with “{name}”. Does the other device show the same code?': 'Kopplung mit „{name}“. Zeigt das andere Gerät denselben Code?',
'Codes differ': 'Codes unterschiedlich',
'Codes match': 'Codes stimmen überein',
'Pairing was rejected on this device.': 'Die Kopplung wurde auf diesem Gerät abgelehnt.',
'Pairing was rejected on the other device.': 'Die Kopplung wurde auf dem anderen Gerät abgelehnt.',
'Pairing verification failed.': 'Die Überprüfung der Kopplung ist fehlgeschlagen.',
'Device is not ready for pairing': 'Das Gerät ist nicht zum Koppeln bereit',
// Main-Prozess
'Host key has changed!': 'Host-Schlüssel hat sich geändert!',
'Unknown host': 'Unbekannter Host',