#SSH
cmux ssh cria um espaço de trabalho para uma máquina remota. Os painéis do navegador roteiam pela rede remota, os arquivos são arrastados e soltos via scp, os agentes de codificação enviam notificações para a barra lateral local e as sessões são reconectadas quando descartadas.
#Uso
cmux ssh user@remote
cmux ssh user@remote --name "dev server"
cmux ssh user@remote -p 2222
cmux ssh user@remote -i ~/.ssh/id_ed25519cmux ssh lê seu ~/.ssh/config para aliases de host, arquivos de identidade e configurações de proxy. Todos os sinalizadores espelham seus equivalentes ssh.
#Bandeiras
| Bandeira | Descrição |
|---|---|
--name | Defina o título do espaço de trabalho |
-p, --port | Porta SSH (padrão 22) |
-i, --identity | Caminho para o arquivo de identidade |
-o, --ssh-option | Passe opções SSH arbitrárias (por exemplo, -o StrictHostKeyChecking=no) |
--no-focus | Crie o espaço de trabalho sem mudar para ele |
#Links diretos SSH
Use links diretos SSH do cmux quando um site ou ferramenta quiser oferecer um botão Abrir no cmux. O link abre o cmux, mostra um prompt de confirmação e executa o comando cmux ssh equivalente após a confirmação do usuário.
cmux://ssh?host=dev.example.com
cmux://ssh?host=dev.example.com&user=alice&port=2222&title=GPU%20box
cmux://ssh?host=workspace123.vm-ssh.freestyle.sh&user=workspace123%2Csession-token
cmux://ssh?host=dev.example.com&host-key-policy=accept-new&no-focus=trueUse o URL substituto cmux.com para botões de sites. Ele abre o link nativo e mostra o download caso o cmux não esteja instalado.
https://cmux.com/deeplink/ssh?host=workspace123.vm-ssh.freestyle.sh&user=workspace123%2Csession-token&title=FreestyleOs botões de prompt e regras usam o mesmo formato substituto. Vírgulas, dois-pontos e sinais de adição literais são preservados quando são codificados em URL:
https://cmux.com/deeplink/prompt?text=Review%20this%20branch
https://cmux.com/deeplink/rules?name=freestyle&text=Prefer%20commas,%20colons:%20and%20small%20PRsUse o ícone SVG para botões do painel ou o logotipo PNG quando uma imagem raster for necessária:
https://cmux.com/cmux-icon.svg
https://cmux.com/logo.pngCrie o URL substituto com URLSearchParams para que títulos, aliases de host e nomes de usuário sejam codificados com segurança:
const params = new URLSearchParams({
host: "workspace123.vm-ssh.freestyle.sh",
user: "workspace123,session-token",
title: "Freestyle",
});
const href = "https://cmux.com/deeplink/ssh?" + params.toString();| Parâmetro | Significado |
|---|---|
host | Host SSH necessário ou alias ~/.ssh/config. |
user | Usuário SSH opcional. cmux combina-o com host como user@host. |
port | Porta SSH opcional, de 1 a 65535. |
title / name | Título opcional do espaço de trabalho. Use apenas um título ou nome. |
connect-timeout | Valor opcional de ConnectTimeout em segundos, de 1 a 600. |
server-alive-interval | Valor opcional de ServerAliveInterval em segundos, de 1 a 3600. |
server-alive-count-max | Valor opcional de ServerAliveCountMax, de 1 a 100. |
host-key-policy | Política StrictHostKeyChecking opcional: aceitar novo, perguntar, estrito ou sim. |
no-focus | Booleano opcional. true cria o espaço de trabalho sem mudar para ele. |
Use cmux:// para o aplicativo estável, cmux-nightly:// para Nightly e cmux-dev:// para Debug ou compilações dev marcadas.
Links externos não podem transmitir arquivos de identidade, opções SSH brutas, comandos, ProxyCommand ou regras de encaminhamento. Coloque chaves, ProxyJump, HostName e opções avançadas em ~/.ssh/config. cmux exibe a visualização do comando e exige que o usuário confie no destino SSH antes de se conectar.
#Painéis do navegador
Os painéis do navegador em um espaço de trabalho remoto roteiam todo o tráfego HTTP e WebSocket pela rede da máquina remota. Digite localhost:3000 e você verá o servidor de desenvolvimento em execução na caixa remota. Sem sinalizadores -L, sem encaminhamento manual de porta. Cada espaço de trabalho remoto obtém um armazenamento de cookies isolado para que as sessões tenham escopo por conexão.
#Arraste e solte
Arraste uma imagem ou arquivo para um terminal remoto e o cmux carrega-o via scp por meio da conexão SSH existente. cmux detecta o processo SSH em primeiro plano por TTY e roteia o upload por meio da multiplexação ControlMaster.
#Notificações
Os processos na máquina remota podem executar comandos cmux executados na sua instância local. Quando um agente de codificação chama cmux notify na caixa remota, a notificação aparece na barra lateral local. O anel azul acende na guia da área de trabalho. Cmd+Shift+U salta para ele. O spam de notificação de conexões instáveis é suprimido com um resfriamento por host.
#Agentes de codificação por SSH
cmux claude-teams e cmux omo trabalham dentro de sessões SSH. O daemon de retransmissão Go no host remoto lida com a mesma tradução tmux-compat que a CLI local do Swift faz. Os agentes do Teammate aparecem como divisões nativas do cmux em sua máquina local enquanto a computação é executada na caixa remota.
# Inside an SSH session:
cmux claude-teams
cmux omo#Reconectar
Quando a conexão cai, o cmux se reconecta com espera exponencial (3s, 6s, 12s, até 60s). A sessão remota persiste e o cmux é reconectado ao reconectar, redimensionando com a semântica de menor ganho de tela. As opções padrão de keepalive (ServerAliveInterval=20, ServerAliveCountMax=2) são injetadas, a menos que sua configuração já as defina.
#Daemon de retransmissão
Na primeira conexão, o cmux investiga o host remoto (uname -s, uname -m) e carrega um binário cmuxd-remote versionado. O binário fala JSON-RPC sobre stdio e lida com três coisas:
| Recurso | Como |
|---|---|
| Proxy de tráfego do navegador | SOCKS5 e HTTP CONNECT através do canal stdio do daemon |
| Retransmissão CLI | Túnel TCP reverso com autenticação HMAC-SHA256 para que processos remotos possam chamar comandos cmux localmente |
| Gerenciamento de sessão | Persiste sessões em reconexões, coordena o redimensionamento de PTY em vários anexos |
O binário daemon é armazenado em ~/.cmux/bin/cmuxd-remote/<version>/<os>-<arch>/cmuxd-remote no host remoto e verificado em um manifesto SHA-256 incorporado no aplicativo.