Hai cinque server da gestire, ognuno con IP diverso, utente diverso, password diverse. Ogni volta che ti connetti perdi tempo, rischi di sbagliare credenziali o peggio: usi ancora la password. Noi di Meteora Web vediamo questa scena ogni giorno, nei clienti che ci arrivano con server ancora accessibili via password o con chiavi SSH senza passphrase. È un rischio enorme. Con un po' di configurazione, puoi rendere l'accesso SSH rapido, sicuro e quasi automatico. Vediamo come.
Come gestire le chiavi SSH per un accesso sicuro e senza password?
La base di SSH sicuro sono le coppie di chiavi asimmetriche. Generi una chiave privata (tenuta al sicuro) e una pubblica (messa sui server). Niente più password in chiaro, niente brute-force contro il login.
Generare una coppia di chiavi robusta
Usa l'algoritmo Ed25519, più veloce e sicuro di RSA 4096. Il comando è semplice:
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519
Ti verrà chiesta una passphrase. Non lasciarla vuota. La passphrase protegge la chiave privata se qualcuno ruba il tuo computer. Senza, chiunque abbia accesso al file può connettersi ai tuoi server.
Sponsored Protocol
Copiare la chiave pubblica sul server
ssh-copy-id -i ~/.ssh/id_ed25519.pub utente@server
Se il server non ha ssh-copy-id, fallo manualmente: aggiungi il contenuto di id_ed25519.pub a ~/.ssh/authorized_keys sul server.
Usare l'agente SSH per non digitare la passphrase ogni volta
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Ora le connessioni successive non richiedono la passphrase per la sessione del terminale. Su macOS, l'agente parte automaticamente; su Linux, aggiungi quei comandi al tuo .bashrc o .zshrc.
Disabilitare l'autenticazione password sul server
Dopo aver testato le chiavi, modifica /etc/ssh/sshd_config sul server:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Riavvia SSH: sudo systemctl restart sshd. Ora l'unico modo per entrare è con la chiave. Errore comune: disabilitare le password prima di aver testato la chiave. Fallo dopo esserti connesso con successo con la chiave.
Come configurare il tunneling SSH per bypassare firewall e proteggere i dati?
Immagina di avere un database PostgreSQL su un server che ascolta solo su localhost. Non vuoi esporlo su Internet. Con il tunneling SSH, puoi inoltrare una porta locale a quella remota e connetterti come se fosse sulla tua macchina.
Sponsored Protocol
Local port forwarding
ssh -L 5432:localhost:5432 utente@server
Ora localhost:5432 sulla tua macchina punta al port 5432 del server. Usi psql -h localhost e sei dentro. Nessuna esposizione di porte, tutto crittografato.
Remote port forwarding
Utile per esporre un servizio locale su un server remoto, ad esempio per test da un ambiente esterno:
ssh -R 8080:localhost:80 utente@server
Così chi si connette a server:8080 viene reindirizzato alla tua macchina locale sulla porta 80.
Dynamic port forwarding (SOCKS proxy)
ssh -D 1080 utente@server
Configuri il browser per usare localhost:1080 come proxy SOCKS5. Tutto il traffico passa attraverso il server remoto, crittografato. Perfetto per navigare da una rete pubblica o accedere a risorse interne.
Sponsored Protocol
Stabilizzare il tunnel con opzioni
ssh -f -N -L 5432:localhost:5432 utente@server
-f manda in background, -N non esegue comandi, solo port forwarding. Per tunnel persistenti, considera autossh che riavvia il tunnel se cade.
Come ottimizzare il file config SSH per connessioni rapide e gestione multi-server?
Il file ~/.ssh/config ti evita di digitare ogni volta IP, utente, porta e chiave. Puoi definire alias per ogni server e opzioni globali.
Host webserver
HostName 192.168.1.100
User deploy
Port 2222
IdentityFile ~/.ssh/webserver_key
ServerAliveInterval 60
Host database
HostName db.internal
User admin
LocalForward 3306 localhost:3306
Host *
ServerAliveInterval 30
AddKeysToAgent yes
ControlMaster auto
ControlPath ~/.ssh/controlmaster/%r@%h:%p
ControlPersist 4h
Ora basta ssh webserver e sei dentro. ControlMaster e ControlPersist riutilizzano una connessione per più sessioni, riducendo il tempo di handshake. La directory ~/.ssh/controlmaster/ va creata: mkdir -p ~/.ssh/controlmaster.
Sponsored Protocol
Autocompletamento degli host
Con il config, la shell può completare i nomi degli host. Su Bash, aggiungi:
complete -W "$(grep -i '^Host ' ~/.ssh/config | cut -d' ' -f2)" ssh
Cosa fare adesso
- Genera una nuova coppia di chiavi Ed25519 con passphrase forte.
- Copiala sui tuoi server e disabilita l'accesso password dopo aver verificato la connessione.
- Configura l'agente SSH per caricare la chiave all'avvio della shell.
- Crea un file
~/.ssh/configcon alias per ogni server, attivando ControlMaster per velocizzare le connessioni. - Prova il tunneling locale per un servizio sensibile (database, admin panel) invece di esporlo su Internet.
Noi di Meteora Web applichiamo queste pratiche su ogni server che gestiamo per i nostri clienti, dal piccolo sito WordPress all'infrastruttura multi-server. Non lasciare i tuoi server in balia di password deboli o di connessioni lente. Se vuoi approfondire l'automazione di queste configurazioni con Ansible, abbiamo scritto una guida completa sull'automazione Linux.