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:
@@ -374,14 +374,14 @@ export const settingsDict = {
|
||||
"settings.remoteInstances.page.field.modePlaceholder": "Selecionar modo",
|
||||
"settings.remoteInstances.page.field.modeManaged": "Iniciar para mim",
|
||||
"settings.remoteInstances.page.field.modeExternal": "Já está em execução",
|
||||
"settings.remoteInstances.page.field.preferredRemotePort": "Porta remoto preferido",
|
||||
"settings.remoteInstances.page.field.preferredRemotePortHint": "Port to use on the remote machine. Leave empty to choose one automatically.",
|
||||
"settings.remoteInstances.page.field.preferredRemotePort": "Porta na máquina remota",
|
||||
"settings.remoteInstances.page.field.preferredRemotePortHint": "Porta que o OpenChamber usa na máquina remota. Deixe vazio para escolher automaticamente.",
|
||||
"settings.remoteInstances.page.field.keepServerRunning": "Manter servidor em execução",
|
||||
"settings.remoteInstances.page.field.keepServerRunningHint": "Keep OpenChamber running on the remote machine after you disconnect.",
|
||||
"settings.remoteInstances.page.field.bindHost": "Host de link",
|
||||
"settings.remoteInstances.page.field.bindHostHint": "Where the local connection should listen. Use 127.0.0.1 or localhost unless you need LAN access.",
|
||||
"settings.remoteInstances.page.field.preferredLocalPort": "Porta local preferido",
|
||||
"settings.remoteInstances.page.field.preferredLocalPortHint": "Local port to open for this connection. Leave empty to choose one automatically.",
|
||||
"settings.remoteInstances.page.field.keepServerRunningHint": "Manter o servidor remoto rodando depois de desconectar. Desligado, ele para ao desconectar e sobe de novo na próxima conexão.",
|
||||
"settings.remoteInstances.page.field.bindHost": "Quem pode acessar",
|
||||
"settings.remoteInstances.page.field.bindHostHint": "Quem pode abrir o endereço encaminhado neste computador. A máquina remota continua acessível somente pelo túnel SSH nos dois casos.",
|
||||
"settings.remoteInstances.page.field.preferredLocalPort": "Porta neste computador",
|
||||
"settings.remoteInstances.page.field.preferredLocalPortHint": "Porta aberta neste computador para o túnel. Deixe vazio para escolher automaticamente.",
|
||||
"settings.remoteInstances.page.field.forwardType": "Tipo de encaminhamento",
|
||||
"settings.remoteInstances.page.field.localHostPlaceholder": "127.0.0.1",
|
||||
"settings.remoteInstances.page.field.remoteHostPlaceholder": "127.0.0.1",
|
||||
@@ -1203,8 +1203,8 @@ export const settingsDict = {
|
||||
"settings.remoteInstances.page.section.actionsDescription": "Conecte, reconecte, veja logs ou remova esta conexão.",
|
||||
"settings.remoteInstances.page.section.remoteServer": "OpenChamber na máquina remota",
|
||||
"settings.remoteInstances.page.section.remoteServerDescription": "Escolha como o OpenChamber deve rodar depois que o SSH conectar.",
|
||||
"settings.remoteInstances.page.section.mainTunnel": "Acesso local",
|
||||
"settings.remoteInstances.page.section.mainTunnelDescription": "Escolha o endereço local usado para abrir este servidor OpenChamber remoto.",
|
||||
"settings.remoteInstances.page.section.mainTunnel": "Acesso a partir deste computador",
|
||||
"settings.remoteInstances.page.section.mainTunnelDescription": "O OpenChamber roda na máquina remota. Estas opções controlam apenas o endereço neste computador que leva até ela pelo túnel SSH.",
|
||||
"settings.remoteInstances.page.section.authentication": "Autenticação",
|
||||
"settings.remoteInstances.page.section.authenticationDescription": "Credenciais opcionais para SSH e para a interface de usuário do OpenChamber remoto.",
|
||||
"settings.remoteInstances.page.section.portForwards": "Redeirecciones de porta",
|
||||
@@ -1217,8 +1217,6 @@ export const settingsDict = {
|
||||
"settings.remoteInstances.page.field.installMethod": "Método de instalação",
|
||||
"settings.remoteInstances.page.field.installMethodHint": "Como o OpenChamber deve ser colocado na máquina remota quando este app o inicia para você.",
|
||||
"settings.remoteInstances.page.field.selectInstallMethodPlaceholder": "Selecionar método de instalação",
|
||||
"settings.remoteInstances.page.field.installMethodDownloadRelease": "Baixar versão",
|
||||
"settings.remoteInstances.page.field.installMethodUploadBundle": "Enviar paquete",
|
||||
"settings.remoteInstances.page.field.selectBindHostPlaceholder": "Selecionar host de link",
|
||||
"settings.remoteInstances.page.field.sshPasswordOptional": "Senha SSH (opcional)",
|
||||
"settings.remoteInstances.page.field.sshPasswordPlaceholder": "Introducir senha SSH",
|
||||
@@ -1242,7 +1240,44 @@ export const settingsDict = {
|
||||
"settings.remoteInstances.page.actions.enableForwardAria": "Ativar redeirección",
|
||||
"settings.remoteInstances.page.actions.openLocal": "Abrir local",
|
||||
"settings.remoteInstances.page.actions.addForward": "Adicionar redeirección",
|
||||
"settings.remoteInstances.page.import.sectionTitle": "Hosts SSH salvos",
|
||||
"settings.remoteInstances.page.addDialog.description": "Escolha um host da sua configuração SSH ou digite a conexão você mesmo.",
|
||||
"settings.remoteInstances.page.addDialog.sourceLabel": "De onde vem a conexão",
|
||||
"settings.remoteInstances.page.addDialog.tab.saved": "Da configuração SSH",
|
||||
"settings.remoteInstances.page.addDialog.tab.manual": "Digitar eu mesmo",
|
||||
"settings.remoteInstances.page.addDialog.searchPlaceholder": "Buscar hosts",
|
||||
"settings.remoteInstances.page.addDialog.emptySaved": "Nenhum host encontrado na sua configuração SSH. Digite a conexão você mesmo.",
|
||||
"settings.remoteInstances.page.addDialog.searchEmpty": "Nenhum host corresponde a esta busca.",
|
||||
"settings.remoteInstances.page.addDialog.use": "Usar",
|
||||
"settings.remoteInstances.page.state.notConnected": "Sem conexão",
|
||||
"settings.remoteInstances.page.state.connecting": "Conectando",
|
||||
"settings.remoteInstances.page.state.ready": "Conectado",
|
||||
"settings.remoteInstances.page.state.problem": "Precisa de atenção",
|
||||
"settings.remoteInstances.page.section.advanced": "Configurações avançadas",
|
||||
"settings.remoteInstances.page.section.advancedHint": "Portas, método de instalação, senhas e encaminhamentos extras. Os padrões servem para quase todas as conexões.",
|
||||
"settings.remoteInstances.page.field.installMethodAuto": "Automático",
|
||||
"settings.remoteInstances.page.error.hint.noRuntime": "A máquina remota não tem bun nem npm. Instale um deles lá ou mude esta conexão para “Já em execução”.",
|
||||
"settings.remoteInstances.page.error.hint.noOpencode": "A CLI do opencode não está instalada na máquina remota. Instale-a lá (veja opencode.ai) e conecte novamente.",
|
||||
"settings.remoteInstances.page.error.action.setUiPassword": "Definir senha da interface",
|
||||
"settings.remoteInstances.page.error.action.pickRandomPort": "Usar outra porta local",
|
||||
"settings.remoteInstances.page.error.action.setRemotePort": "Definir a porta remota",
|
||||
"settings.remoteInstances.page.validation.externalPortRequired": "Defina primeiro uma porta remota. No modo “Já em execução”, o OpenChamber precisa saber em qual porta o servidor escuta.",
|
||||
"settings.remoteInstances.page.empty.noInstances": "Ainda não há conexões SSH.",
|
||||
"settings.remoteInstances.page.field.uiPasswordRequired": "Senha da interface (obrigatória)",
|
||||
"settings.remoteInstances.page.field.uiPasswordMissingForLan": "Obrigatória enquanto o servidor remoto estiver acessível na rede dele.",
|
||||
"settings.remoteInstances.page.field.remoteLanAccess": "Acessível na rede remota",
|
||||
"settings.remoteInstances.page.field.remoteLanAccessHint": "Permitir que outros dispositivos da rede da máquina remota abram este OpenChamber diretamente, sem o túnel SSH. É obrigatória uma senha da interface.",
|
||||
"settings.remoteInstances.page.field.remoteLanAccessWarning": "Qualquer pessoa nessa rede alcança o OpenChamber remoto. Só a senha da interface abaixo o protege.",
|
||||
"settings.remoteInstances.page.validation.remoteLanNeedsPassword": "Defina primeiro uma senha da interface. Sem ela, o OpenChamber remoto ficaria aberto a todos os dispositivos daquela rede.",
|
||||
"settings.remoteInstances.page.field.bindHostOption.loopback": "Somente este computador (127.0.0.1)",
|
||||
"settings.remoteInstances.page.field.bindHostOption.localhost": "Somente este computador (localhost)",
|
||||
"settings.remoteInstances.page.field.bindHostOption.lan": "Qualquer dispositivo da minha rede (0.0.0.0)",
|
||||
"settings.remoteInstances.page.field.sshPasswordHint": "Só é necessária quando este host pede senha em vez de aceitar uma chave SSH.",
|
||||
"settings.remoteInstances.page.field.uiPasswordHintManaged": "Senha que protegerá a interface remota do OpenChamber. O OpenChamber a define no servidor que inicia para você.",
|
||||
"settings.remoteInstances.page.field.uiPasswordHintExternal": "Senha do servidor OpenChamber que já está em execução na máquina remota, usada para entrar nele.",
|
||||
"settings.remoteInstances.page.tunnelPreview.caption": "Esta conexão encaminha:",
|
||||
"settings.remoteInstances.page.empty.noInstancesWithOneImport": "Ainda não há conexões SSH. Há 1 host disponível para importar da sua configuração SSH.",
|
||||
"settings.remoteInstances.page.empty.noInstancesWithImports": "Ainda não há conexões SSH. Há {count} hosts disponíveis para importar da sua configuração SSH.",
|
||||
"settings.remoteInstances.page.state.loadingInstances": "Carregando conexões...",
|
||||
"settings.remoteInstances.page.import.loading": "Carregando hosts SSH...",
|
||||
"settings.remoteInstances.page.import.noneFound": "Nenhum host SSH encontrado.",
|
||||
"settings.remoteInstances.page.import.noneAvailable": "Não há hosts SSH disponíveis para importar.",
|
||||
|
||||
Reference in New Issue
Block a user