Pense um momento no que aconteceria se amanhã não pudesse entrar numa das suas máquinas. A chave SSH estava no portátil de alguém que já cá não está; a palavra-passe de Administrator foi mudada por um técnico e ninguém a anotou; uma alteração na configuração do SSH correu mal e a porta fechou-se consigo do lado de fora. A máquina continua a funcionar e o site continua aberto, mas já não manda nela, e na AWS ninguém lha abre: não há um "esqueci-me da palavra-passe" nem um suporte que entre por si. O Lightsail tira-o do aperto em Linux (a sua consola web entra com uma chave temporária), mas em Windows só se ninguém tiver alguma vez tocado na palavra-passe, e no EC2 o caminho oficial passa por parar a máquina. Quando isso não serve, restam horas de instantâneos e máquinas novas, no pior momento. Este guia ensina-o a deixar preparada uma porta de emergência antes de precisar dela, feita para que só você a possa usar.
Antes de começar: o que significa cada coisa
- Utilizador de emergência
- Mais um utilizador administrador na máquina, que não se usa para trabalhar: só para recuperar o acesso aos restantes.
- Certificado SSH
- Uma "chave com prazo de validade" assinada por uma autoridade em que a máquina confia. Ao contrário de uma chave normal, não é preciso copiá-la para a máquina e pode valer só cinco minutos.
- Autoridade de certificação (CA)
- A chave que assina esses certificados. A máquina aceita quem trouxer um certificado assinado por ela; sem a CA não se pode fabricar nenhum.
- from=
- Uma condição na configuração do SSH: esse utilizador só pode entrar a partir de um endereço IP concreto.
- sudo / Administrators
- A forma de ser administrador em Linux (sudo) e em Windows (grupo Administrators).
Passo a passo
Decida como quer que seja a porta de emergência
Um utilizador de emergência mal feito é pior do que não o ter: uma palavra-passe anotada num documento partilhado é a primeira porta que um atacante experimenta. O que procuramos: que não tenha palavra-passe, que só admita certificados assinados por si e de curta duração, e se possível que só aceite ligações a partir de um IP fixo seu. Assim, mesmo que alguém conheça o nome do utilizador, não tem nada para experimentar.
Crie uma autoridade de certificação (uma só vez)
No seu computador, não na máquina:
ssh-keygen -t ed25519 -f ca_rescate -C "CA de rescate"Guarde
ca_rescate(a privada) num sítio seguro: um gestor de palavras-passe ou um disco cifrado. Nunca a copie para as máquinas. O ficheiroca_rescate.pubé o que irá para cada máquina.Prepare a máquina Linux
Entre por SSH como sempre (ainda pode) e, com sudo:
sudo useradd -m -s /bin/bash -c "Usuario de rescate" rescate sudo usermod -p "*" rescate # sin contraseña valida, sin bloquear echo "rescate ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/90-rescate sudo chmod 440 /etc/sudoers.d/90-rescate sudo cp ca_rescate.pub /etc/ssh/ca_rescate.pub echo 'from="TU.IP.FIJA" rescate' | sudo tee /etc/ssh/principales_rescateE em
/etc/ssh/sshd_config(ou num ficheiro em/etc/ssh/sshd_config.d/), no início:TrustedUserCAKeys /etc/ssh/ca_rescate.pub AuthorizedPrincipalsFile /etc/ssh/principales_rescateVerifique e recarregue:
sudo sshd -t && sudo systemctl reload ssh. O utilizadorrescatenão tem palavra-passe e só aceita certificados da sua CA, e só a partir do seu IP se pôsfrom=.Prepare a máquina Windows
O Windows Server 2019 e posteriores trazem o OpenSSH como funcionalidade opcional. No PowerShell como administrador:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0, arranque o serviçosshde abra a porta 22 na firewall do Windows e na do Lightsail ou EC2 (só para o seu IP). Crie o utilizador com uma palavra-passe aleatória longa que não anote em lado nenhum (não o crie sem palavra-passe: o Windows bloqueia por defeito o acesso por rede das contas com palavra-passe em branco, e o OpenSSH conta como acesso por rede), meta-o em Administrators, copieca_rescate.pube o ficheiro de principais paraC:\ProgramData\ssh\e, nosshd_configdessa mesma pasta, ponha as mesmas duas linhas que em Linux (os caminhos com__PROGRAMDATA__/ssh/). Um detalhe que faz perder horas: o OpenSSH do Windows rejeita os ficheiros de autenticação que outros utilizadores possam ler, por isso retire-lhes a herança de permissões e deixe só Administrators e SYSTEM:icacls FICHERO /inheritance:r /grant Administrators:F /grant SYSTEM:F. Reinicie osshd. Se quiser que ao entrar apareça o PowerShell em vez do cmd, defina a chave de registoHKLM:\SOFTWARE\OpenSSH\DefaultShellparapowershell.exe.Teste a porta antes de precisar dela
Gere uma chave normal e assine-a com a CA por cinco minutos:
ssh-keygen -t ed25519 -f temporal -N "" ssh-keygen -s ca_rescate -I "prueba" -n rescate -V +5m temporal.pub ssh -i temporal rescate@IP.DE.LA.MAQUINA sudo -n true && echo OKSe vir OK, a porta funciona. Passados cinco minutos o certificado deixa de valer sozinho: não há nada para revogar nem apagar.
Se já perdeu o acesso: o que fazer com a porta aberta
Entre com um certificado novo e arranje o administrador: em Linux
sudo passwd ubuntu(ou o utilizador que for) ou acrescente a sua chave pública nova ao seu~/.ssh/authorized_keys; em Windowsnet user Administrator NUEVA-CONTRASEÑA. Se a conta estava bloqueada,sudo passwd -u usuarioounet user usuario /active:yes.E se não tinha porta de emergência
Linux no Lightsail: a consola web do Lightsail entra com uma chave temporária, por isso a partir daí pode fazer o do passo anterior. Windows no Lightsail: a consola dá-lhe a palavra-passe de Administrator só se ninguém a mudou; senão, há que criar um instantâneo e uma máquina nova. EC2: o procedimento oficial AWSSupport-ResetAccess do Systems Manager repõe a palavra-passe ou a chave parando e arrancando a máquina.
E se também não há instantâneo
É o fim da cadeia e convém olhá-lo de frente: se não se pode entrar e não existe nenhuma cópia da máquina, perde-se tudo o que há lá dentro. A aplicação, a base de dados, os ficheiros, as configurações. A AWS não pode entrar por si nem recuperar o que não foi copiado, e não há um serviço técnico a quem ligar. Por isso a porta de emergência e os instantâneos automáticos não são duas opções entre as quais escolher: são as duas coisas que separam um susto de uma hora de perder o negócio de um cliente.
O que pode correr mal
"Permission denied" apesar de o certificado estar correto
Quase sempre é o from=: está a entrar a partir de outro IP. Ou o utilizador tem o campo da palavra-passe bloqueado com ! (o useradd deixa-o assim por defeito em alguns sistemas): ponha-lhe * com usermod -p "*".
"Certificate invalid: not yet valid" no registo do sshd
O relógio da máquina está atrasado. Um certificado de minutos tem uma hora de início, e se o servidor achar que ainda não chegou, rejeita-o com um Permission denied que não explica nada: só se vê com LogLevel DEBUG. Em Linux, timedatectl diz-lhe se está sincronizado e chronyc makestep corrige-o; em Windows, w32tm /resync. Ao assinar, deixe sempre uma margem para trás (-V -15m:+5m): um início anterior não alarga nada de perigoso, porque a validade final continua a ser a mesma.
A máquina já usava TrustedUserCAKeys
É o caso de todas as máquinas Lightsail: a sua consola web funciona com uma autoridade própria, e só pode haver uma diretiva TrustedUserCAKeys. Não a mude, ou perderá a consola do Lightsail. Em vez disso, ponha a autoridade no authorized_keys do próprio utilizador de emergência, que convive com qualquer outra: cert-authority,principals="rescate",from="TU.IP.FIJA" ssh-ed25519 AAAA… (o conteúdo de ca_rescate.pub a seguir às opções).
Alguém apagou o utilizador de emergência
Quem é administrador pode retirá-lo, é inevitável. A defesa é verificá-lo todos os dias (uma ligação de teste) e avisar se falhar, para o refazer enquanto ainda tem acesso.
E se me roubarem a CA?
Quem tiver a CA pode fabricar certificados para todas as suas máquinas. Por isso vai num gestor de palavras-passe e não num e-mail, e por isso o from= importa: sem o seu IP, a CA sozinha não serve. Se suspeitar, gere outra CA e repita o passo de preparação em cada máquina.
No Simplio
No Simplio isto chama-se chave suplente: cada cartão de máquina tem esse botão. "Criar chave suplente" deixa na máquina o utilizador simplio-rescate sem palavra-passe utilizável, que só aceita certificados de cinco minutos assinados pelo Simplio e só a partir do IP do Simplio; em Linux fá-lo o Simplio por SSH, em Windows dá-lhe um script para colar uma vez. Se perder o acesso, "Resgatar com a chave suplente": com o seu código do duplo fator (também se for administrador) escolhe o utilizador a recuperar (ou pede para ver que utilizadores há) e o que fazer: uma palavra-passe nova que se mostra uma só vez e não se guarda, acrescentar a sua chave pública, desbloqueá-lo, ou uma consola como simplio-rescate. O Simplio verifica todos os dias que a chave continua a abrir e avisa-o se alguém a tiver retirado. Como funciona a chave suplente e que segurança tem.
O mesmo, na AWS e no Simplio
| Na consola da AWS | No Simplio | |
|---|---|---|
| Preparar a porta | Criar a CA, o utilizador, o sudo, os dois ficheiros e as diretivas do SSH em cada máquina, à mão | Um botão "Criar chave suplente" no cartão: o Simplio fá-lo por SSH (Linux) ou dá-lhe o script para colar uma vez (Windows) |
| Guardar a CA | Você, num gestor de palavras-passe | No servidor do Simplio, no ficheiro de segredos; as máquinas só aceitam o utilizador de emergência a partir do IP do Simplio |
| Usá-la | Assinar um certificado à mão e entrar por SSH | Duplo fator, certificado de cinco minutos automático, e ações guiadas: palavra-passe nova (mostra-se uma vez), chave pública, desbloquear |
| Saber que continua a funcionar | Lembrar-se de a testar | Verificação diária e aviso se a chave suplente deixar de funcionar |
| Não saber que utilizador recuperar | Entrar e ver /home ou as contas do Windows | "Ver que utilizadores há na máquina": lista com pasta, administrador e último acesso |