As chaves SSH no iPhone e no iPad são geradas no próprio dispositivo e guardadas no armazenamento seguro do sistema. Só a chave pública vai para o servidor, onde é acrescentada a ~/.ssh/authorized_keys com o ssh-copy-id ou à mão. A chave privada nunca deve sair do telemóvel, e o servidor espera permissões 700 em ~/.ssh e 600 em authorized_keys.
Como gerar uma chave SSH Ed25519 no iPhone ou iPad
O OpenSSH suporta chaves Ed25519 desde a versão 6.5, lançada em janeiro de 2014, pelo que qualquer servidor razoavelmente atual as aceita. Ed25519 é o tipo a escolher para uma chave nova. Também evita depender da assinatura SHA-1 ssh-rsa, que está desativada por predefinição desde o OpenSSH 8.8 (setembro de 2021).
Num computador, o par de chaves cria-se com o ssh-keygen. As opções estão descritas na página oficial do manual do ssh-keygen:
ssh-keygen -t ed25519 -C "iphone-work"
# Creates ~/.ssh/id_ed25519 (private) and ~/.ssh/id_ed25519.pub (public)Um iPhone ou iPad não tem ssh-keygen local, por isso é o cliente SSH que gera a chave. No termi1, a chave é criada no telemóvel e fica no armazenamento seguro do sistema. Obtém o par habitual:
- uma chave privada que nunca sai do dispositivo;
- uma chave pública, que é uma única linha de texto (por exemplo
ssh-ed25519 AAAA… comment) e a única parte que copia para o servidor.
Se usar uma chave de segurança FIDO2, o OpenSSH aceita chaves ed25519-sk desde a versão 8.2 (fevereiro de 2020). O servidor tem de correr essa versão ou uma mais recente.
Onde fica guardada a chave SSH no iPhone e no computador
Num computador com OpenSSH, a chave privada é um ficheiro em ~/.ssh/ com permissões 600. Está protegida apenas por essas permissões e por uma frase-passe, se tiver definido uma. No iOS, a chave fica no armazenamento seguro do sistema, e a aplicação usa-a para autenticar sem a deixar como um ficheiro solto.
| O que se compara | iPhone / iPad (termi1) | Computador (OpenSSH) |
|---|---|---|
| Onde fica a chave privada | Armazenamento seguro do sistema | Ficheiro em ~/.ssh com permissões 600 |
| Como é gerada | A partir da aplicação, no próprio dispositivo | ssh-keygen -t ed25519 |
| Como a chave pública chega ao servidor | Colada em authorized_keys ou emparelhada através do termi1 Companion num Mac | ssh-copy-id ou colada em authorized_keys |
| Se a chave privada sai da máquina | Não; também nunca vai para os servidores do termi1 | Só se for o utilizador a copiá-la |
| O que se sincroniza entre dispositivos | Ligações e atalhos com uma conta opcional; nunca a chave privada | Nada; a configuração copia-se à mão |
Na prática, cada dispositivo tem a sua própria chave. Dê a cada uma um comentário que a identifique (iphone-work, ipad-home). Se perder o telemóvel, pode revogar apenas essa linha.
Copiar a chave SSH pública para o servidor com ssh-copy-id
O ssh-copy-id acrescenta uma chave pública a ~/.ssh/authorized_keys no servidor e cria o diretório se não existir. Corre numa máquina que tenha OpenSSH. Use-o quando a chave pública do iPhone já estiver no seu portátil (por AirDrop, email ou área de transferência) e o portátil conseguir iniciar sessão no servidor.
# Save the iPhone's public key line as iphone-work.pub and upload it
ssh-copy-id -f -i iphone-work.pub user@server
# If sshd is not listening on port 22
ssh-copy-id -f -i iphone-work.pub -p 2222 user@serverPrecisa de -f porque a chave privada não está no portátil. Sem essa opção, o ssh-copy-id usa a chave privada correspondente para verificar se a chave já está instalada. O OpenSSH escuta na porta TCP 22 por predefinição, por isso -p só é necessário se a tiver alterado.
Adicionar a chave SSH a authorized_keys a partir do próprio iPhone
O sshd espera permissões 700 em ~/.ssh e 600 em authorized_keys, por isso defina-as enquanto adiciona a chave à mão. Sem nenhum computador pelo meio, inicie sessão uma vez com palavra-passe a partir do iPhone e execute:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo 'ssh-ed25519 AAAA...your-key... iphone-work' >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keysUse >>, não >. Um único sinal de maior sobrescreve o ficheiro e bloqueia todas as outras chaves.
O teclado do termi1 tem as teclas Ctrl, Tab e setas para corrigir a linha. O SFTP integrado permite ver ou descarregar o authorized_keys para confirmar que a linha está completa. Se pedir o comando à IA, este é escrito no prompt sem carregar em Enter, e a IA nunca recebe chaves nem palavras-passe.
Com um Mac, o processo é mais curto. O termi1 Companion (macOS 14 ou posterior, gratuito, na barra de menus) verifica o Início de sessão remoto, o mosh-server e o tmux. Depois emparelha o iPhone com um código de seis dígitos que instala a chave pública.
Quando o início de sessão com chave funcionar, defina PasswordAuthentication no em /etc/ssh/sshd_config. Mantenha a sessão atual aberta até confirmar o acesso por chave a partir de uma segunda sessão.
4 erros ao usar chaves SSH no iPhone ou iPad
Estes quatro problemas fazem o sshd voltar a pedir a palavra-passe ou impedem que a sessão sequer abra:
- Permissões demasiado abertas. Com
StrictModes yes, a predefinição, o sshd ignora o authorized_keys se outros utilizadores puderem escrever nele. Reponha 700 e 600. - Linha partida ao colar. Uma chave pública é uma única linha, e uma quebra de linha a meio invalida-a.
- Assumir que o Mosh dispensa a chave. O Mosh arranca o mosh-server através de uma ligação SSH inicial e depois precisa das portas UDP 60000-61000. Não faz reencaminhamento de portas nem X11.
- Expor a porta 22 só por causa do telemóvel. Para máquinas sem IP público, uma rede mesh sem portas abertas como o Prialo, ou o Tailscale, é mais limpa.
Com a chave instalada, o termi1 mantém a sessão ativa com o Mosh quando passa do Wi-Fi para os dados móveis. Usa o tmux para que aquilo que deixou a correr continue lá quando voltar. O terminal completo funciona sem conta; obtenha o terminal termi1 na App Store.
Perguntas frequentes
É possível executar o ssh-copy-id a partir de um iPhone?
O ssh-copy-id não corre num iPhone, porque o iOS não inclui uma shell local com as ferramentas do OpenSSH. A partir do telemóvel, inicie sessão com palavra-passe e acrescente a chave pública a ~/.ssh/authorized_keys com echo e >>. Em alternativa, execute ssh-copy-id -f -i num computador que já acede ao servidor.
Que tipo de chave SSH se deve gerar num iPhone?
O melhor tipo de chave SSH para gerar num iPhone é Ed25519, suportado pelo OpenSSH desde a versão 6.5, de janeiro de 2014. Evite depender da assinatura ssh-rsa SHA-1, desativada por predefinição desde o OpenSSH 8.8. Com uma chave de segurança FIDO2, o tipo ed25519-sk exige OpenSSH 8.2 ou posterior.
A chave SSH privada sai do iPhone quando se usa o termi1?
Uma chave SSH privada gerada no termi1 nunca sai do iPhone: fica no armazenamento seguro do sistema e nunca é enviada para os servidores do termi1. A conta opcional sincroniza ligações e atalhos, não chaves privadas. A IA não abre a sessão e nunca recebe chaves nem palavras-passe.
Que permissões precisa o authorized_keys para a chave funcionar?
O ficheiro authorized_keys precisa de permissões 600 e o diretório ~/.ssh precisa de 700, ambos pertencentes ao utilizador. Com StrictModes ativo, que é a predefinição do sshd, permissões mais abertas fazem o servidor ignorar a chave e voltar a pedir a palavra-passe.