Transformar o telemóvel num servidor SSH com o Termux

Por Tiago & SkyNet · 18 de setembro de 2026

O Termux é um terminal Linux dentro do Android e, na maior parte do tempo, é isso que lhe peço: um sítio onde correr comandos. Mas há alturas em que me dá mais jeito que o telemóvel seja o outro lado da ligação — puxar fotografias sem cabo, correr um script sobre ficheiros que estão no telefone, deixar uma tarefa longa a trabalhar e ir vendo o resultado do computador.

Montar um servidor SSH no Termux são três comandos. O problema é que quase todos os guias falham nos mesmos dois pontos: a porta não é a 22, é a 8022, e o sshd morre assim que o Termux fecha. Isso é o que costuma separar uma experiência de dez minutos de uma tarde perdida.

O que se segue é o caminho completo: o que instalar, como manter o servidor de pé, como aceder aos ficheiros do Android e o que verificar quando a ligação não passa.

O que é preciso

Pacote Para que serve
openssh Traz o cliente e o servidor no mesmo pacote.
termux-services Serviço persistente, com arranque e paragem controlados.
net-tools Traz o ifconfig, usado para descobrir o IP local.
openssh-sftp-server Só é necessário se quiseres SFTP a partir do computador.
Termux:Boot (app) Arranca o servidor no boot do telemóvel.

Instalar o OpenSSH no Termux

pkg update && pkg install openssh

No Termux o mesmo pacote serve para ligar a outros servidores e para receber ligações, por isso não há passo separado para o lado do servidor.

Definir a password

A autenticação por password vem ligada por omissão, o que é prático para as primeiras ligações. Antes de arrancar o servidor:

passwd

O programa aceita passwords com um carácter, o que é uma péssima ideia. Vale a pena usar algo com mais de dez caracteres e trocar para autenticação por chave pública assim que a ligação esteja a funcionar.

Descobrir o utilizador e o IP

São os dois dados que vais precisar do lado do computador:

whoami     # devolve algo como u0_a305
ifconfig   # procura a linha inet, algo como 192.168.1.101

Se o ifconfig não existir, vem do pacote net-tools:

pkg install net-tools

O nome devolvido pelo whoami é gerado pelo Android e não se muda — volto a isto mais abaixo, porque tem consequências práticas.

Arrancar o sshd

sshd

Sem output, arrancou. E aqui está o primeiro ponto onde os guias se perdem: a porta é a 8022, não a 22. A 22 é uma porta privilegiada e o Termux corre como uma aplicação normal, sem permissões para lá chegar, por isso o pacote do Termux muda a porta em dois sítios. No código, o SSH_DEFAULT_PORT fica fixado em 8022; na configuração, o $PREFIX/etc/ssh/sshd_config que vem instalado já traz #Port 8022 onde o OpenSSH normal traz #Port 22.

Como a linha vem comentada, quem manda é o valor compilado. Se um dia quiseres mudar de porta, o sítio é exatamente esse: descomentar e editar a linha no sshd_config, e ajustar o cliente.

Para parar o servidor:

pkill sshd

O sshd escreve no log do sistema Android, não num ficheiro dentro do Termux. Para ver o que se passa:

logcat -s 'sshd:*'

Manter o servidor de pé

Arrancar o sshd à mão resolve a ligação de hoje e falha na de amanhã. Há três problemas encadeados: o ecrã apaga e o sistema corta o trabalho, o Termux fecha e leva o sshd atrás, e o telemóvel reinicia e não há servidor nenhum.

1. Impedir que o sistema adormeça

termux-wake-lock

Adquire um wakelock pelo Termux. Para o libertar, termux-wake-unlock.

2. Um serviço em condições, com termux-services

Em vez de andar a lançar o sshd à mão, entregas o serviço ao termux-services:

pkg install termux-services
sv-enable sshd

Depois de instalar o termux-services é preciso reiniciar o Termux, para o daemon de serviços arrancar. A partir daí tens uma interface consistente para todos os serviços:

Comando Efeito
sv-enable sshd Ativa o serviço e arranca-o no início de cada sessão.
sv up sshd Arranca agora, sem o ativar para o futuro.
sv down sshd Para o serviço.
sv-disable sshd Desativa-o.

Os logs ficam em $PREFIX/var/log/sv/sshd/, no ficheiro current. Vale a pena guardar este caminho: é bastante mais fácil de ler do que andar a filtrar o logcat.

3. Arrancar no boot do telemóvel

Para o servidor estar de pé mesmo depois de reiniciar o telefone, o caminho é o add-on Termux:Boot. Depois de instalado, é preciso abrir a app uma vez para o Android lhe permitir correr no boot, e desligar a otimização de bateria para o Termux e para o próprio Termux:Boot.

A seguir, cria um script em ~/.termux/boot/. Os ficheiros dessa pasta são executados por ordem alfabética:

mkdir -p ~/.termux/boot
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
sshd

Se preferires que seja o termux-services a tratar do assunto no boot:

#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
source /data/data/com.termux/files/usr/etc/profile.d/start-services.sh

Não mistures as duas abordagens: ou o serviço arranca pelo termux-services, ou o script chama o sshd diretamente.

4. O sistema que mata processos em segundo plano

Do Android 12 para cá existe um mecanismo que mata processos filhos em segundo plano quando há mais de 32, ou quando um deles consome demasiado CPU. No Termux isto aparece como [Process completed (signal 9) - press Enter] a meio de uma tarefa, e pode levar o servidor com ele.

Nas versões mais recentes do Android há uma opção nas Developer options chamada Disable child process restrictions. Em versões mais antigas, o mesmo se resolve por ADB:

adb shell settings put global settings_enable_monitor_phantom_procs false

Depois de alterar, reinicia o telemóvel. É uma limitação do sistema, não um problema do Termux.

Endurecer: chave pública em vez de password

Assim que a ligação por password funcione, o passo seguinte é deixar de a usar. No computador:

ssh-keygen -t ed25519
ssh-copy-id -p 8022 u0_a305@192.168.1.101

A chave pública fica em ~/.ssh/authorized_keys dentro do Termux. Depois disso, em $PREFIX/etc/ssh/sshd_config:

PasswordAuthentication no

E reiniciar o servidor:

pkill sshd; sshd

Deixa a sessão por onde estás a trabalhar aberta até confirmares que a nova ligação entra. Se algo correu mal, a alternativa é ir buscar o telemóvel e voltar atrás no sshd_config — é mais chato do que parece.

As diretivas que valem a pena conhecer estão documentadas no manual do sshd_config:

Diretiva O que faz
PasswordAuthentication no Desliga o login por password. Só depois de a chave pública estar a funcionar.
PubkeyAuthentication Liga ou desliga a autenticação por chave pública.
Port Porta de escuta. Vem comentada com 8022; é esta a linha a descomentar para mudar. Se mudares aqui, muda também no ~/.ssh/config do cliente.
ListenAddress Limita a escuta a uma interface, por exemplo o IP do tailnet.
AllowUsers Restringe quem pode entrar.
PermitRootLogin Por omissão está em prohibit-password e não há razão para lhe mexer.
MaxAuthTries Limita as tentativas de autenticação por ligação.
LoginGraceTime Tempo que o servidor espera pela autenticação antes de fechar a ligação.

O nome de utilizador não se muda (e não faz mal)

O whoami no Termux devolve nomes como u0_a305. É tentador querer mudar isto para deixar de escrever o nome esquisito nas ligações, mas não dá: esse nome é construído pelo libc a partir do identificador de utilizador do Android no momento em que o sistema resolve as propriedades do utilizador, e não vem de um ficheiro que se possa editar.

O que se pode fazer é controlar o que o cliente envia. Do lado do Termux, quando és tu a ligar-te a outros servidores:

Host *
  User o_teu_utilizador

Em ~/.ssh/config dentro do Termux, isto faz com que todas as ligações de saída usem o nome que escolheres, sem o repetires em cada comando.

Do lado de quem entra no telemóvel, o nome tem de ser o real — u0_a305, ou o que o whoami devolver naquele aparelho. Como esse nome pode mudar (reinstalação, outro perfil de utilizador), vale mais guardá-lo num bloco de configuração do que o escrever à mão em cada comando.

Ligar a partir do computador

Com o telemóvel e o computador na mesma rede Wi-Fi:

ssh -p 8022 u0_a305@192.168.1.101

O -p é obrigatório. Se o esqueceres, vais bater na 22 e o resultado é uma ligação recusada que parece um problema de servidor.

Para não andar a repetir tudo, um bloco em ~/.ssh/config no computador:

Host telemovel
  HostName 192.168.1.101
  Port 8022
  User u0_a305

A partir daí, basta:

ssh telemovel

Atenção a um detalhe chato: o IP do telemóvel vem por DHCP e pode mudar. Se o atalho deixar de funcionar de um dia para o outro, o mais provável é teres um IP novo — confirma com ifconfig no Termux. Reservar um IP fixo no router, ou usar o nome do tailnet, resolve isto de vez.

Aceder às fotografias e aos downloads

Para chegar ao DCIM e às pastas de downloads, o Termux precisa da permissão de armazenamento do Android:

termux-setup-storage

O comando pede a permissão (aceita o diálogo no telemóvel) e cria uma pasta ~/storage/ com atalhos:

Caminho Aponta para
~/storage/shared Raiz do armazenamento partilhado entre aplicações.
~/storage/downloads Pasta de downloads do sistema.
~/storage/dcim Fotografias e vídeos.
~/storage/pictures Imagens disponíveis ao utilizador.
~/storage/music Áudio que entra na lista de música.
~/storage/movies Vídeos.
~/storage/external-1 Pasta do Termux no cartão externo, quando existe.

Duas limitações que vale a pena saber de antemão: esta permissão não dá escrita no cartão SD externo nem em discos ligados por USB, e no Android 11 pode aparecer Permission denied mesmo com a permissão concedida. Nesse caso, revoga e volta a conceder a permissão em Definições → Aplicações → Termux.

Com o acesso ao armazenamento, podes levantar as fotografias a partir do computador:

rsync -av -e 'ssh -p 8022' telemovel:~/storage/dcim/ ~/Pictures/telemovel/

E para navegar nos ficheiros do telefone, SFTP:

sftp -P 8022 telemovel

Repara que o sftp usa -P maiúsculo, ao contrário do ssh, que usa -p. É uma daquelas pequenas armadilhas que dão erros difíceis de ler. Para o rsync funcionar, o pacote tem de estar instalado nas duas pontas:

pkg install rsync

Controlar o rádio e o ecrã pelo Termux

Há uma família de comandos svc que fala diretamente com o Android e é útil exatamente quando o servidor “desaparece”: o Wi-Fi desligou-se, o telemóvel mudou de rede, o ecrã apagou e o sistema cortou o trabalho.

svc wifi enable
svc wifi disable

svc data enable
svc data disable

svc airplane enable
svc airplane disable

svc power stayon true
svc power stayon false

O svc power stayon true mantém o ecrã ligado e é a forma mais direta de tirar o ecrã da equação quando algo falha sem explicação. A lista completa inclui ainda Bluetooth, NFC e a função USB:

svc usb setFunctions mtp
svc usb setFunctions rndis
svc usb setFunctions adb

Nem todos estes comandos funcionam em todos os aparelhos: alguns dependem da ROM e podem exigir root ou ser executados por ADB. Vale a pena testar cada um antes de contar com ele.

Quando não funciona

A maior parte dos problemas está num destes seis casos:

Sintoma Causa provável O que fazer
Connection refused O sshd não está a correr, ou estás a bater na porta errada. Corre sshd no Termux e confirma o -p 8022.
Connection timed out Outra rede, IP mudado, ou tráfego de entrada bloqueado. Confirma o IP com ifconfig, testa com o hotspot do telemóvel, ver a secção do Android 16.
Funcionava e deixou de funcionar depois de fechar o Termux O sshd morre quando a sessão do Termux termina. termux-services ou Termux:Boot, mais termux-wake-lock e otimização de bateria desligada.
[Process completed (signal 9)] a meio de uma tarefa Mecanismo de limitação de processos em segundo plano do Android 12 e seguintes. Developer options → Disable child process restrictions, ou o comando por ADB.
Permission denied (publickey) Password desligada e a chave não ficou em ~/.ssh/authorized_keys. Repete o ssh-copy-id, ou liga temporariamente a password.
Permission denied ao ler ~/storage Permissão de armazenamento concedida mas não aplicada. Revoga e volta a conceder a permissão em Definições → Aplicações → Termux.

Android 16 e o acesso à rede local

Um assunto que vale a pena ter em conta antes de acusar o sshd. O Android passou a tratar o acesso à rede local como uma permissão à parte: no Android 16, essa restrição é opcional e só afeta as aplicações que a ela adiram, mas a partir do Android 17 passa a ser obrigatória para tudo o que atualize o targetSdk. Sem a permissão, o que falha é precisamente o tráfego de entrada na rede local — e o sintoma típico de uma ligação TCP bloqueada é um timeout, não uma recusa.

Na prática, isto significa que se o telemóvel aceita bem ligações de saída mas ninguém consegue entrar na 8022, há duas suspeitas a separar: a configuração do sshd e o bloqueio do próprio sistema. Testar a porta a partir do computador com o nmap ajuda a perceber qual dos dois é:

nmap -p 8022 192.168.1.101

Fora da rede local: Tailscale

Por omissão, isto só funciona na mesma rede Wi-Fi. Se quiseres chegar ao telemóvel a partir de outra rede, o caminho mais simples é o Tailscale: instalas a aplicação no telemóvel e o cliente no computador, entras na mesma tailnet e a partir daí tens um endereço fixo para o telefone, com a mesma porta:

ssh -p 8022 u0_a305@100.x.y.z

Não é preciso abrir portas no router nem expor o sshd à internet, o que é a grande vantagem em relação a redireccionar a 8022 no router de casa. A ligação segue por WireGuard, com endereços que não mudam quando o telemóvel troca de rede.

Resumo dos comandos

Comando O que faz
pkg install openssh Instala cliente e servidor SSH.
passwd Define a password do utilizador do Termux.
whoami / ifconfig Nome de utilizador e IP do aparelho.
sshd / pkill sshd Arranca e para o servidor.
termux-wake-lock Impede o sistema de cortar o trabalho em segundo plano.
sv-enable sshd Serviço persistente com o termux-services.
termux-setup-storage Cria os atalhos em ~/storage/.
ssh -p 8022 user@ip Liga ao telemóvel a partir de outra máquina.
logcat -s 'sshd:*' Lê os logs do servidor.

Conclusão

Transformar o telemóvel num servidor SSH é uma daquelas tarefas que parece trivial e que tropeça sempre nos mesmos detalhes: a porta 8022, o sshd que morre com a sessão e a permissão de armazenamento que não vem ativa. Resolvidos esses três pontos, ficas com uma máquina Linux na rede — a sério, sem cabo, sem aplicações de sincronização e sem depender de nenhum serviço de terceiros.

Para uso doméstico, a receita é curta: openssh, uma chave pública, o termux-services a tratar do serviço e o Termux:Boot para o arranque. Se quiseres ir mais longe, a seguir vêm o Tailscale, para o acesso fora de casa, e o SFTP ou o rsync, para trazer e levar ficheiros sem pensar mais no assunto.


Fontes: Termux Wiki — Remote Access · sshd_config(5), manual do OpenSSH · Termux Wiki — Termux-services · Android Developers — permissão de rede local · Tailscale no Android

Tags: #Android #Termux #SSH #redes