O Mosh precisa da ligação SSH inicial (TCP 22 por predefinição) e de uma porta UDP por sessão, escolhida entre 60000 e 61000. Para não expor esse intervalo inteiro, fixe um intervalo curto com mosh -p 60000:60010 e permita apenas esse intervalo no ufw, no iptables ou no security group do seu fornecedor de cloud.
Que portas o Mosh usa: TCP para o SSH, UDP 60000-61000 para a sessão
O Mosh arranca o mosh-server através de uma ligação SSH inicial e, a partir daí, toda a sessão corre sobre UDP. Isso significa duas aberturas distintas no servidor: a porta SSH (TCP 22 por predefinição no OpenSSH) e uma porta UDP dentro do intervalo 60000-61000.
O intervalo predefinido tem 1001 portas. Cada mosh-server escuta na sua própria porta, pelo que o intervalo só tem de cobrir as sessões simultâneas que espera ter nessa máquina. Num VPS que administra sozinho, isso são meia dúzia de sessões, não mil.
Quando o SSH funciona mas os pacotes UDP nunca chegam, o cliente limita-se a esperar: a autenticação foi bem-sucedida e o terminal fica congelado. É o sintoma clássico de uma firewall que deixa passar a porta 22 e descarta o intervalo UDP.
Fixar a porta UDP do Mosh com mosh -p: uma porta ou um intervalo curto
A opção -p (ou --port) do cliente indica ao mosh-server em que porta UDP se deve ligar, ou em que intervalo deve procurar uma porta livre, no formato PORT ou PORT:PORT2. Sem ela, o Mosh escolhe uma porta entre 60000 e 61000.
# One specific UDP port
mosh -p 60001 user@server
# A short range: mosh-server takes the first free port
mosh -p 60000:60010 user@server
# SSH listening somewhere other than 22
mosh --ssh="ssh -p 2222" -p 60000:60010 user@serverUma única porta fixa é a opção mais restritiva, mas só permite uma sessão de cada vez: uma segunda ligação com o mesmo -p não consegue ligar-se a essa porta enquanto a primeira continuar ativa. Um intervalo de onze portas deixa espaço para várias sessões e para algum mosh-server órfão sem abrir o bloco inteiro. A sintaxe completa do cliente e do servidor está na documentação oficial do Mosh.
Regras ufw para o Mosh: porque é que 60000:61010/udp abre mais do que precisa
sudo ufw allow 60000:61010/udp passa de tutorial em tutorial e abre dez portas para além do intervalo predefinido do Mosh, que termina em 61000. Se também fixar um intervalo com mosh -p, o coerente é abrir exatamente esse intervalo e mais nada.
# SSH first, so enabling ufw does not lock you out
sudo ufw allow 22/tcp
# Only the range mosh -p will use
sudo ufw allow 60000:60010/udp
# Remove the wide rule if it is already there
sudo ufw delete allow 60000:61010/udp
sudo ufw enable
sudo ufw status numberedO ufw exige um protocolo sempre que abre um intervalo de portas, e é por isso que a regra leva /udp. Antes de executar ufw enable numa máquina remota, confirme que a regra do SSH aparece na lista: sem ela perde também a ligação inicial de que o Mosh precisa para lançar o mosh-server.
O Mosh em security groups na cloud e com iptables
Um security group na cloud filtra antes de o pacote chegar à máquina, enquanto o ufw ou o iptables filtram dentro dela: o Mosh precisa do intervalo UDP aberto nas duas camadas. Abrir apenas uma produz a mesma sessão que autentica e depois nunca responde.
# iptables, on the server itself
sudo iptables -A INPUT -p udp --dport 60000:60010 -j ACCEPT
# AWS security group, via the CLI
aws ec2 authorize-security-group-ingress \
--group-id sg-0123456789abcdef0 \
--protocol udp --port 60000-60010 \
--cidr 0.0.0.0/0A origem 0.0.0.0/0 é intencional: um telemóvel que passa do Wi-Fi para os dados móveis muda de endereço IP, e o Mosh transporta a sessão a partir do novo endereço. Restringir a origem ao IP de casa ou do escritório quebra precisamente essa transição. Se o servidor não puder aceitar tráfego da internet de todo, a resposta é uma rede privada, não uma lista de IPs permitidos.
Mosh vs SSH vs redes mesh: o que cada opção expõe
O Mosh não faz reencaminhamento de portas nem reencaminhamento X11, pelo que não substitui o SSH para túneis -L ou -R. A tabela resume o que cada opção abre no servidor e como se comporta a partir de um telemóvel.
| Método de acesso | Portas de entrada no servidor | Mudança de Wi-Fi para dados móveis | Reencaminhamento de portas |
|---|---|---|---|
| Só SSH | TCP 22 | A ligação cai; o tmux mantém as tarefas em execução | Sim, com -L e -R |
| Mosh, intervalo predefinido | TCP 22 e UDP 60000-61000 | A sessão continua | Não |
| Mosh com -p 60000:60010 | TCP 22 e UDP 60000-60010 | A sessão continua | Não |
| Rede mesh privada | Nenhuma aberta à internet | O Mosh funciona da mesma forma dentro da rede | O do próprio SSH, se o usar |
Com uma rede mesh privada, sem portas abertas como o Prialo, ou com o Tailscale, pode chegar a máquinas sem IP público e sem portas abertas à internet; o Mosh e o SSH mantêm as portas habituais, mas apenas dentro dessa rede.
4 erros ao abrir portas UDP para o Mosh
- Colar 60000:61010 sem verificar. O intervalo predefinido do Mosh termina em 61000; se fixar outro com
-p, abra exatamente esse. - Abrir apenas uma camada. Uma regra no ufw mas nenhuma no security group, ou o inverso: o SSH entra, o UDP não.
- Filtrar pelo IP de origem. O telemóvel muda de IP ao passar para os dados móveis, e a regra mata a sessão que o Mosh estava a manter viva.
- Ficar sem portas livres. Processos
mosh-serverde sessões abandonadas continuam a ocupar portas do intervalo. Encontre-os comss -ulpn | grep mosh-servere termine-os comkille o respetivo PID.
Usar o Mosh a partir de iOS e Android com o termi1
O termi1 mantém a sessão viva com o Mosh quando passa do Wi-Fi para os dados móveis e usa o tmux para que aquilo que deixou a correr continue lá quando voltar; no servidor, as regras acima são tudo o que precisa. O teclado próprio do termi1 tem Esc, Ctrl, Tab e teclas de seta, o que ajuda a editar regras longas ou a sair de um ufw status paginado sem lutar com o teclado do sistema.
A IA do termi1 transforma uma frase como "abre as portas UDP 60000 a 60010 do Mosh no ufw" no comando e escreve-o no prompt sem carregar em Enter, para que verifique o intervalo antes de o executar. Nas ligações marcadas como produção, o Production Guard retém tudo o que altera o estado, como uma regra de firewall, antes de chegar ao prompt. A IA nunca abre a sessão nem recebe chaves, e a chave privada nunca sai do telemóvel. Saiba mais sobre o terminal SSH e Mosh para telemóvel.
Se o servidor for um Mac, o termi1 Companion (macOS 14 ou posterior) verifica se o início de sessão remoto, o mosh-server e o tmux estão disponíveis antes de se ligar.
Perguntas frequentes
Que portas o Mosh precisa de ter abertas na firewall?
O Mosh precisa da porta TCP do SSH, 22 por predefinição, para a ligação inicial, e de uma porta UDP por sessão no intervalo 60000-61000. Se fixar um intervalo com mosh -p, basta abrir esse intervalo UDP tanto na firewall como no security group.
Como indico ao Mosh que porta UDP deve usar?
A porta UDP do Mosh define-se com a opção -p ou --port do cliente, por exemplo mosh -p 60001 user@server para uma porta fixa ou mosh -p 60000:60010 para um intervalo. O mosh-server liga-se à primeira porta livre dentro do intervalo indicado.
Porque é que o Mosh autentica por SSH e depois fica bloqueado?
O Mosh autentica por SSH sobre TCP e depois passa para UDP; se o terminal congelar logo após a autenticação, uma firewall ou um security group está a bloquear o intervalo UDP. Verifique as duas camadas e confirme que o intervalo aberto coincide com o passado ao mosh -p.
O Mosh suporta reencaminhamento de portas como o SSH?
O Mosh não faz reencaminhamento de portas nem reencaminhamento X11. Para túneis -L ou -R precisa de uma ligação SSH separada, ou de uma rede mesh privada como o Prialo ou o Tailscale para chegar diretamente ao serviço interno sem abrir portas.