
Aprove o sudo em uma estação de trabalho Linux com uma impressão digital no seu telefone Android. Apenas LAN; a chave ECDSA nunca sai do TEE do telefone e fala o protocolo ssh-agent com o pam_rssh.
Aprove o sudo na sua máquina Linux tocando no sensor de impressão digital do seu telefone Android.
Digite sudo, seu telefone vibra, você toca no sensor, o comando é executado. Nenhuma senha é digitada, nada
na nuvem: o telefone responde pela sua LAN, e a impressão digital é verificada pelo hardware seguro
do telefone (TEE / StrongBox), não pelo código do aplicativo. Se algo der errado (telefone desligado, fora
de alcance, você toca em Negar, passam 60 segundos) o sudo simplesmente recorre ao seu prompt de senha
comum. Ele pode tornar o sudo mais conveniente; não pode bloquear você.
![]() 1. sudo no host O telefone exibe quem está pedindo. Negar funciona direto daqui. |
![]() 2. Toque nela Uma contagem regressiva, o host e a hora, um aviso para hosts nunca vistos. Depois, o prompt de impressão digital do sistema. |
![]() 3. Toque no sensor O TEE assina, o sudo prossegue, o aplicativo se fecha sozinho. |
![]() Primeira execução Três etapas e um botão. Oferece cadastro de impressão digital se o telefone não tiver nenhuma. |
![]() Configuração Uma lista de verificação ao vivo: listener, notificações, bateria, Não Perturbe. "Pronto" apenas quando tudo passa. |
![]() Negado ou expirado Nenhuma assinatura sai do telefone; o host pede a senha. |
Capturas de tela de um emulador Pixel 7 (daí 10.0.2.2, o host do emulador). A
folha de impressão digital do sistema que aparece sobre a etapa 2 é uma janela segura e não aparece nas
capturas de tela.
sudo on the host
-> PAM: pam_rssh (third-party) dials the phone over the LAN, as an ssh-agent
-> phone: "Approve sudo? From 192.168.1.10" (notification)
-> tap -> BiometricPrompt -> fingerprint
-> the phone's TEE signs pam_rssh's fresh 32-byte challenge
-> pam_rssh verifies against the pinned public key -> sudo proceeds
pam_rssh,
um módulo existente e mantido. Nada escrito aqui é executado como root no host no
momento da autenticação.setUserAuthenticationParameters(0, AUTH_BIOMETRIC_STRONG): uma nova biometria forte para
cada assinatura, imposta dentro do TEE (ou StrongBox). Malware no telefone também não consegue assinar
sem o seu dedo, e a chave não pode ser exportada.SECURITY.md tem o modelo de ameaças completo, incluindo contra o que ele não protege. docs/DESIGN.md tem o design e o raciocínio por trás dele.
Telefone: Android 11+ (API 30, onde chaves biométricas por uso se tornaram expressáveis) com um sensor de impressão digital Classe 3 ("forte").
Host: qualquer uma das plataformas abaixo. O instalador traz o
pam_rssh consigo: um pacote onde existe, caso contrário
compilado a partir de um commit fixado e verificado.
| Plataforma | Status |
|---|---|
| Arch, Manjaro, EndeavourOS | ✅ testado de ponta a ponta na CI |
| Debian 12 / 13, Ubuntu 24.04, Mint, Pop!_OS | ✅ testado de ponta a ponta na CI |
| Fedora, RHEL / Rocky / Alma 9 | ✅ testado de ponta a ponta na CI |
| openSUSE Tumbleweed | ✅ testado de ponta a ponta na CI |
| Windows, via WSL (qualquer distribuição acima) | 🧪 deve funcionar, não testado; a descoberta pode não ver o telefone através do NAT do WSL2, então passe --phone |
macOS 14+ (via /etc/pam.d/sudo_local) | 🧪 experimental, não testado |
FreeBSD (porta security/pam_rssh) | 🧪 experimental, não testado |