Pensa un momento a cosa succederebbe se domani non potessi entrare in una delle tue macchine. La chiave SSH stava nel portatile di qualcuno che non c'è più; la password di Administrator l'ha cambiata un tecnico e nessuno l'ha annotata; una modifica alla configurazione di SSH è andata male e la porta si è chiusa con te fuori. La macchina continua a funzionare e il sito resta aperto, ma tu non la comandi più, e in AWS nessuno te la apre: non c'è un "ho dimenticato la password" né un supporto che entri al posto tuo. Lightsail ti toglie dai guai su Linux (la sua console web entra con una chiave temporanea), ma su Windows solo se nessuno ha mai toccato la password, e su EC2 la via ufficiale passa per fermare la macchina. Quando questo non basta, restano ore di istantanee e macchine nuove, nel momento peggiore. Questa guida ti insegna a lasciare pronta una porta di emergenza prima di averne bisogno, fatta in modo che solo tu possa usarla.
Prima di iniziare: cosa significa ogni cosa
- Utente di emergenza
- Un utente amministratore in più sulla macchina, che non si usa per lavorare: solo per recuperare l'accesso al resto.
- Certificato SSH
- Una "chiave con data di scadenza" firmata da un'autorità di cui la macchina si fida. A differenza di una chiave normale, non bisogna copiarla sulla macchina e può valere solo cinque minuti.
- Autorità di certificazione (CA)
- La chiave che firma quei certificati. La macchina accetta chi porta un certificato firmato da lei; senza la CA non se ne può fabbricare nessuno.
- from=
- Una condizione nella configurazione di SSH: quell'utente può entrare solo da un indirizzo IP preciso.
- sudo / Administrators
- Il modo di essere amministratore su Linux (sudo) e su Windows (gruppo Administrators).
Passo dopo passo
Decidi come vuoi che sia la porta di emergenza
Un utente di emergenza fatto male è peggio che non averlo: una password annotata in un documento condiviso è la prima porta che prova un attaccante. Quello che cerchiamo: che non abbia password, che accetti solo certificati firmati da te e di breve durata, e possibilmente che accetti connessioni solo da un tuo IP fisso. Così, anche se qualcuno conosce il nome dell'utente, non ha niente da provare.
Crea un'autorità di certificazione (una sola volta)
Sul tuo computer, non sulla macchina:
ssh-keygen -t ed25519 -f ca_rescate -C "CA de rescate"Conserva
ca_rescate(la privata) in un posto sicuro: un gestore di password o un disco cifrato. Non copiarla mai sulle macchine. Il fileca_rescate.pubè quello che andrà su ogni macchina.Prepara la macchina Linux
Entra via SSH come sempre (puoi ancora) e, con 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 in
/etc/ssh/sshd_config(o in un file in/etc/ssh/sshd_config.d/), all'inizio:TrustedUserCAKeys /etc/ssh/ca_rescate.pub AuthorizedPrincipalsFile /etc/ssh/principales_rescateVerifica e ricarica:
sudo sshd -t && sudo systemctl reload ssh. L'utenterescatenon ha password e accetta solo certificati della tua CA, e solo dal tuo IP se hai messofrom=.Prepara la macchina Windows
Windows Server 2019 e successivi includono OpenSSH come funzionalità opzionale. In PowerShell come amministratore:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0, avvia il serviziosshde apri la porta 22 nel firewall di Windows e in quello di Lightsail o EC2 (solo per il tuo IP). Crea l'utente con una password casuale lunga che non annoti da nessuna parte (non crearlo senza password: Windows blocca per impostazione predefinita l'accesso via rete degli account con password vuota, e OpenSSH conta come accesso via rete), mettilo in Administrators, copiaca_rescate.pube il file dei principal inC:\ProgramData\ssh\e, nellosshd_configdi quella stessa cartella, metti le stesse due righe di Linux (i percorsi con__PROGRAMDATA__/ssh/). Un dettaglio che fa perdere ore: OpenSSH di Windows rifiuta i file di autenticazione leggibili da altri utenti, quindi togli loro l'ereditarietà dei permessi e lascia solo Administrators e SYSTEM:icacls FICHERO /inheritance:r /grant Administrators:F /grant SYSTEM:F. Riavviasshd. Se vuoi che entrando compaia PowerShell invece di cmd, imposta la chiave di registroHKLM:\SOFTWARE\OpenSSH\DefaultShellsupowershell.exe.Prova la porta prima di averne bisogno
Genera una chiave normale e firmala con la CA per cinque minuti:
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 vedi OK, la porta funziona. Passati cinque minuti il certificato smette di valere da solo: non c'è niente da revocare né da cancellare.
Se hai già perso l'accesso: cosa fare con la porta aperta
Entra con un certificato nuovo e sistema l'amministratore: su Linux
sudo passwd ubuntu(o l'utente che sia) oppure aggiungi la tua nuova chiave pubblica al suo~/.ssh/authorized_keys; su Windowsnet user Administrator NUEVA-CONTRASEÑA. Se l'account era bloccato,sudo passwd -u usuarioonet user usuario /active:yes.E se non avevi una porta di emergenza
Linux su Lightsail: la console web di Lightsail entra con una chiave temporanea, quindi da lì puoi fare quanto detto nel passo precedente. Windows su Lightsail: la console ti dà la password di Administrator solo se nessuno l'ha cambiata; altrimenti tocca creare un'istantanea e una macchina nuova. EC2: la procedura ufficiale AWSSupport-ResetAccess di Systems Manager reimposta la password o la chiave fermando e riavviando la macchina.
E se non c'è nemmeno un'istantanea
È la fine della catena e conviene guardarla in faccia: se non si può entrare e non esiste nessuna copia della macchina, si perde tutto quello che c'è dentro. L'applicazione, il database, i file, le configurazioni. AWS non può entrare al posto tuo né recuperare quello che non è stato copiato, e non c'è un servizio tecnico da chiamare. Per questo la porta di emergenza e le istantanee automatiche non sono due opzioni tra cui scegliere: sono le due cose che separano uno spavento di un'ora dal perdere l'attività di un cliente.
Cosa può andare storto
"Permission denied" anche se il certificato è corretto
Quasi sempre è il from=: stai entrando da un altro IP. Oppure l'utente ha il campo password bloccato con ! (lo lascia useradd per impostazione predefinita su alcuni sistemi): mettigli * con usermod -p "*".
"Certificate invalid: not yet valid" nel log di sshd
L'orologio della macchina è indietro. Un certificato di pochi minuti ha un'ora di inizio, e se il server crede che non sia ancora arrivata, lo rifiuta con un Permission denied che non spiega niente: si vede solo con LogLevel DEBUG. Su Linux, timedatectl ti dice se è sincronizzato e chronyc makestep lo corregge; su Windows, w32tm /resync. Quando firmi, lascia sempre un margine all'indietro (-V -15m:+5m): un inizio anticipato non allunga niente di pericoloso, perché la scadenza resta la stessa.
La macchina usava già TrustedUserCAKeys
È il caso di tutte le macchine Lightsail: la loro console web funziona con un'autorità propria, e ci può essere una sola direttiva TrustedUserCAKeys. Non cambiarla, o perderai la console di Lightsail. Al suo posto, metti l'autorità nell'authorized_keys dell'utente di emergenza stesso, che convive con qualsiasi altra: cert-authority,principals="rescate",from="TU.IP.FIJA" ssh-ed25519 AAAA… (il contenuto di ca_rescate.pub dopo le opzioni).
Qualcuno ha cancellato l'utente di emergenza
Chi è amministratore può toglierlo, è inevitabile. La difesa è verificarlo ogni giorno (una connessione di prova) e avvisare se fallisce, per rifarlo mentre hai ancora accesso.
E se mi rubano la CA?
Chi ha la CA può fabbricare certificati per tutte le tue macchine. Per questo va in un gestore di password e non in un'email, e per questo il from= conta: senza il tuo IP, la CA da sola non serve. Se hai un sospetto, genera un'altra CA e ripeti il passo di preparazione su ogni macchina.
In Simplio
In Simplio questa si chiama chiave di riserva: ogni scheda di macchina ha quel pulsante. "Crea chiave di riserva" lascia sulla macchina l'utente simplio-rescate senza password utilizzabile, che accetta solo certificati di cinque minuti firmati da Simplio e solo dall'IP di Simplio; su Linux lo fa Simplio via SSH, su Windows ti dà uno script da incollare una volta. Se perdi l'accesso, "Recupera con la chiave di riserva": con il tuo codice del secondo fattore (anche se sei amministratore) scegli l'utente da recuperare (o chiedi di vedere quali utenti ci sono) e cosa fare: una nuova password che viene mostrata una sola volta e non viene salvata, aggiungere la tua chiave pubblica, sbloccarlo, oppure una console come simplio-rescate. Simplio verifica ogni giorno che la chiave apra ancora e ti avvisa se qualcuno l'ha tolta. Come funziona la chiave di riserva e che sicurezza ha.
La stessa cosa, in AWS e in Simplio
| Nella console di AWS | In Simplio | |
|---|---|---|
| Preparare la porta | Creare la CA, l'utente, sudo, i due file e le direttive SSH su ogni macchina, a mano | Un pulsante "Crea chiave di riserva" nella scheda: Simplio lo fa via SSH (Linux) o ti dà lo script da incollare una volta (Windows) |
| Conservare la CA | Tu, in un gestore di password | Sul server di Simplio, nel file dei segreti; le macchine accettano l'utente di emergenza solo dall'IP di Simplio |
| Usarla | Firmare un certificato a mano ed entrare via SSH | Secondo fattore, certificato di cinque minuti automatico, e azioni guidate: nuova password (mostrata una volta), chiave pubblica, sbloccare |
| Sapere che funziona ancora | Ricordarti di provarla | Verifica giornaliera e avviso se la chiave di riserva smette di funzionare |
| Non sapere quale utente recuperare | Entrare e guardare /home o gli account di Windows | "Vedi quali utenti ci sono sulla macchina": elenco con cartella, amministratore e ultimo accesso |