feat(ssh): rework remote instance setup and fix remote installs
Adding an SSH connection now starts from the hosts in the SSH config instead of a blank command field, ports and install options sit behind Advanced settings, and each connection reports one of three states with the failure text and an action that resolves it. Remote installs no longer touch the root-owned global npm prefix: npm is pinned to a prefix under $HOME and bun is resolved at its known location, because an SSH login shell exposes neither on PATH. The opencode CLI is resolved the same way and handed to the remote server through OPENCODE_BINARY, and the server is started and stopped through the resolved binary rather than PATH — the HTTP shutdown route sits behind UI authentication and never stopped anything. A managed remote server can also be published to the remote machine's own network. That requires a UI password, enforced in the form and again in the SSH manager.
This commit is contained in:
@@ -390,14 +390,14 @@ export const settingsDict = {
|
||||
'settings.remoteInstances.page.field.modePlaceholder': 'Modus auswählen',
|
||||
'settings.remoteInstances.page.field.modeManaged': 'Für mich starten',
|
||||
'settings.remoteInstances.page.field.modeExternal': 'Läuft bereits',
|
||||
'settings.remoteInstances.page.field.preferredRemotePort': 'Bevorzugter Remote-Port',
|
||||
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Leer lassen für automatische Auswahl.',
|
||||
'settings.remoteInstances.page.field.preferredRemotePort': 'Port auf dem entfernten Rechner',
|
||||
'settings.remoteInstances.page.field.preferredRemotePortHint': 'Port, den OpenChamber auf dem entfernten Rechner belegt. Leer lassen für eine automatische Wahl.',
|
||||
'settings.remoteInstances.page.field.keepServerRunning': 'Server am Laufen halten',
|
||||
'settings.remoteInstances.page.field.keepServerRunningHint': 'OpenChamber auf der Remote-Maschine weiterlaufen lassen nach Verbindungstrennung.',
|
||||
'settings.remoteInstances.page.field.bindHost': 'Bind-Host',
|
||||
'settings.remoteInstances.page.field.bindHostHint': 'Verwenden Sie 127.0.0.1 oder localhost, es sei denn, Sie benötigen LAN-Zugriff.',
|
||||
'settings.remoteInstances.page.field.preferredLocalPort': 'Bevorzugter lokaler Port',
|
||||
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Leer lassen für automatische Auswahl.',
|
||||
'settings.remoteInstances.page.field.keepServerRunningHint': 'Den entfernten Server nach dem Trennen weiterlaufen lassen. Aus: Er wird beim Trennen gestoppt und beim nächsten Verbinden wieder gestartet.',
|
||||
'settings.remoteInstances.page.field.bindHost': 'Erreichbar für',
|
||||
'settings.remoteInstances.page.field.bindHostHint': 'Wer die weitergeleitete Adresse auf diesem Computer öffnen darf. Der entfernte Rechner selbst bleibt in beiden Fällen nur über den SSH-Tunnel erreichbar.',
|
||||
'settings.remoteInstances.page.field.preferredLocalPort': 'Port auf diesem Computer',
|
||||
'settings.remoteInstances.page.field.preferredLocalPortHint': 'Port, der auf diesem Computer für den Tunnel geöffnet wird. Leer lassen für eine automatische Wahl.',
|
||||
'settings.remoteInstances.page.field.forwardType': 'Weiterleitungstyp',
|
||||
'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1',
|
||||
'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1',
|
||||
@@ -1173,8 +1173,8 @@ export const settingsDict = {
|
||||
'settings.remoteInstances.page.section.actionsDescription': 'Verbinden, erneut verbinden, Protokolle anzeigen oder diese Verbindung entfernen.',
|
||||
'settings.remoteInstances.page.section.remoteServer': 'OpenChamber auf dem Remote-Rechner',
|
||||
'settings.remoteInstances.page.section.remoteServerDescription': 'Wählen Sie aus, wie OpenChamber nach dem SSH-Verbindungsaufbau ausgeführt werden soll.',
|
||||
'settings.remoteInstances.page.section.mainTunnel': 'Lokaler Zugriff',
|
||||
'settings.remoteInstances.page.section.mainTunnelDescription': 'Wählen Sie die lokale Adresse, die zum Öffnen des Remote-OpenChamber-Servers verwendet wird.',
|
||||
'settings.remoteInstances.page.section.mainTunnel': 'Zugriff von diesem Computer',
|
||||
'settings.remoteInstances.page.section.mainTunnelDescription': 'OpenChamber läuft auf dem entfernten Rechner. Diese Einstellungen betreffen nur die Adresse auf diesem Computer, die per SSH-Tunnel dorthin führt.',
|
||||
'settings.remoteInstances.page.section.authentication': 'Authentifizierung',
|
||||
'settings.remoteInstances.page.section.authenticationDescription': 'Optionale Anmeldedaten für SSH und die Remote-OpenChamber-Benutzeroberfläche.',
|
||||
'settings.remoteInstances.page.section.portForwards': 'Portweiterleitungen',
|
||||
@@ -1187,8 +1187,6 @@ export const settingsDict = {
|
||||
'settings.remoteInstances.page.field.installMethod': 'Installationsmethode',
|
||||
'settings.remoteInstances.page.field.installMethodHint': 'Wie OpenChamber auf dem Remote-Rechner platziert werden soll, wenn diese Anwendung es für Sie startet.',
|
||||
'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': 'Installationsmethode auswählen',
|
||||
'settings.remoteInstances.page.field.installMethodDownloadRelease': 'Release herunterladen',
|
||||
'settings.remoteInstances.page.field.installMethodUploadBundle': 'Bundle hochladen',
|
||||
'settings.remoteInstances.page.field.selectBindHostPlaceholder': 'Bind-Host auswählen',
|
||||
'settings.remoteInstances.page.field.sshPasswordOptional': 'SSH-Passwort (optional)',
|
||||
'settings.remoteInstances.page.field.sshPasswordPlaceholder': 'SSH-Passwort eingeben',
|
||||
@@ -1212,7 +1210,44 @@ export const settingsDict = {
|
||||
'settings.remoteInstances.page.actions.enableForwardAria': 'Weiterleitung aktivieren',
|
||||
'settings.remoteInstances.page.actions.openLocal': 'Lokal öffnen',
|
||||
'settings.remoteInstances.page.actions.addForward': 'Weiterleitung hinzufügen',
|
||||
'settings.remoteInstances.page.import.sectionTitle': 'Gespeicherte SSH-Hosts',
|
||||
'settings.remoteInstances.page.addDialog.description': 'Wähle einen Host aus deiner SSH-Konfiguration oder gib die Verbindung selbst ein.',
|
||||
'settings.remoteInstances.page.addDialog.sourceLabel': 'Woher die Verbindung stammt',
|
||||
'settings.remoteInstances.page.addDialog.tab.saved': 'Aus SSH-Konfiguration',
|
||||
'settings.remoteInstances.page.addDialog.tab.manual': 'Selbst eingeben',
|
||||
'settings.remoteInstances.page.addDialog.searchPlaceholder': 'Hosts suchen',
|
||||
'settings.remoteInstances.page.addDialog.emptySaved': 'In deiner SSH-Konfiguration wurden keine Hosts gefunden. Gib die Verbindung stattdessen selbst ein.',
|
||||
'settings.remoteInstances.page.addDialog.searchEmpty': 'Kein Host passt zu dieser Suche.',
|
||||
'settings.remoteInstances.page.addDialog.use': 'Verwenden',
|
||||
'settings.remoteInstances.page.state.notConnected': 'Nicht verbunden',
|
||||
'settings.remoteInstances.page.state.connecting': 'Verbindung wird aufgebaut',
|
||||
'settings.remoteInstances.page.state.ready': 'Verbunden',
|
||||
'settings.remoteInstances.page.state.problem': 'Aktion erforderlich',
|
||||
'settings.remoteInstances.page.section.advanced': 'Erweiterte Einstellungen',
|
||||
'settings.remoteInstances.page.section.advancedHint': 'Ports, Installationsmethode, Passwörter und zusätzliche Weiterleitungen. Für die meisten Verbindungen genügen die Standardwerte.',
|
||||
'settings.remoteInstances.page.field.installMethodAuto': 'Automatisch',
|
||||
'settings.remoteInstances.page.error.hint.noRuntime': 'Auf dem entfernten Rechner gibt es weder bun noch npm. Installiere dort eines davon oder stelle diese Verbindung auf „Läuft bereits“ um.',
|
||||
'settings.remoteInstances.page.error.hint.noOpencode': 'Auf dem entfernten Rechner ist die opencode-CLI nicht installiert. Installiere sie dort (siehe opencode.ai) und verbinde dich erneut.',
|
||||
'settings.remoteInstances.page.error.action.setUiPassword': 'UI-Passwort festlegen',
|
||||
'settings.remoteInstances.page.error.action.pickRandomPort': 'Anderen lokalen Port verwenden',
|
||||
'settings.remoteInstances.page.error.action.setRemotePort': 'Entfernten Port festlegen',
|
||||
'settings.remoteInstances.page.validation.externalPortRequired': 'Lege zuerst einen entfernten Port fest. Im Modus „Läuft bereits“ muss OpenChamber wissen, auf welchem Port der Server lauscht.',
|
||||
'settings.remoteInstances.page.empty.noInstances': 'Noch keine SSH-Verbindungen.',
|
||||
'settings.remoteInstances.page.field.uiPasswordRequired': 'UI-Passwort (erforderlich)',
|
||||
'settings.remoteInstances.page.field.uiPasswordMissingForLan': 'Erforderlich, solange der entfernte Server in seinem Netzwerk erreichbar ist.',
|
||||
'settings.remoteInstances.page.field.remoteLanAccess': 'Im Netzwerk des entfernten Rechners erreichbar',
|
||||
'settings.remoteInstances.page.field.remoteLanAccessHint': 'Anderen Geräten im Netzwerk des entfernten Rechners erlauben, dieses OpenChamber direkt ohne SSH-Tunnel zu öffnen. Ein UI-Passwort ist erforderlich.',
|
||||
'settings.remoteInstances.page.field.remoteLanAccessWarning': 'Jeder in diesem Netzwerk erreicht das entfernte OpenChamber. Es schützt nur das UI-Passwort unten.',
|
||||
'settings.remoteInstances.page.validation.remoteLanNeedsPassword': 'Lege zuerst ein UI-Passwort fest. Ohne eines wäre das entfernte OpenChamber für jedes Gerät in diesem Netzwerk offen.',
|
||||
'settings.remoteInstances.page.field.bindHostOption.loopback': 'Nur dieser Computer (127.0.0.1)',
|
||||
'settings.remoteInstances.page.field.bindHostOption.localhost': 'Nur dieser Computer (localhost)',
|
||||
'settings.remoteInstances.page.field.bindHostOption.lan': 'Jedes Gerät in meinem Netzwerk (0.0.0.0)',
|
||||
'settings.remoteInstances.page.field.sshPasswordHint': 'Nur nötig, wenn dieser Host ein Passwort verlangt, statt einen SSH-Schlüssel zu akzeptieren.',
|
||||
'settings.remoteInstances.page.field.uiPasswordHintManaged': 'Passwort, mit dem die entfernte OpenChamber-Oberfläche geschützt wird. OpenChamber setzt es auf dem Server, den es für dich startet.',
|
||||
'settings.remoteInstances.page.field.uiPasswordHintExternal': 'Passwort des OpenChamber-Servers, der bereits auf dem entfernten Rechner läuft, für die Anmeldung.',
|
||||
'settings.remoteInstances.page.tunnelPreview.caption': 'Diese Verbindung leitet weiter:',
|
||||
'settings.remoteInstances.page.empty.noInstancesWithOneImport': 'Noch keine SSH-Verbindungen. Aus deiner SSH-Konfiguration lässt sich 1 Host importieren.',
|
||||
'settings.remoteInstances.page.empty.noInstancesWithImports': 'Noch keine SSH-Verbindungen. Aus deiner SSH-Konfiguration lassen sich {count} Hosts importieren.',
|
||||
'settings.remoteInstances.page.state.loadingInstances': 'Verbindungen werden geladen...',
|
||||
'settings.remoteInstances.page.import.loading': 'SSH-Hosts werden geladen...',
|
||||
'settings.remoteInstances.page.import.noneFound': 'Keine SSH-Hosts gefunden.',
|
||||
'settings.remoteInstances.page.import.noneAvailable': 'Keine SSH-Hosts zum Importieren verfügbar.',
|
||||
|
||||
Reference in New Issue
Block a user