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 comparaiPhone / iPad (termi1)Computador (OpenSSH)
Onde fica a chave privadaArmazenamento seguro do sistemaFicheiro em ~/.ssh com permissões 600
Como é geradaA partir da aplicação, no próprio dispositivossh-keygen -t ed25519
Como a chave pública chega ao servidorColada em authorized_keys ou emparelhada através do termi1 Companion num Macssh-copy-id ou colada em authorized_keys
Se a chave privada sai da máquinaNão; também nunca vai para os servidores do termi1Só se for o utilizador a copiá-la
O que se sincroniza entre dispositivosLigações e atalhos com uma conta opcional; nunca a chave privadaNada; 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@server

Precisa 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_keys

Use >>, 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:

  1. 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.
  2. Linha partida ao colar. Uma chave pública é uma única linha, e uma quebra de linha a meio invalida-a.
  3. 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.
  4. 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.