f in x
SSH Avanzato — Gestione Chiavi, Tunneling e Config File per Server Sicuri
> cd .. / HUB_EDITORIALE > Visualizza in Inglese
Sistemi Operativi & Sicurezza

SSH Avanzato — Gestione Chiavi, Tunneling e Config File per Server Sicuri

[2026-06-22] Author: Ing. Calogero Bono

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

  1. Genera una nuova coppia di chiavi Ed25519 con passphrase forte.
  2. Copiala sui tuoi server e disabilita l'accesso password dopo aver verificato la connessione.
  3. Configura l'agente SSH per caricare la chiave all'avvio della shell.
  4. Crea un file ~/.ssh/config con alias per ogni server, attivando ControlMaster per velocizzare le connessioni.
  5. 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.

Ing. Calogero Bono

> AUTHOR_EXTRACTED

Ing. Calogero Bono

Ingegnere Informatico, co-fondatore di Meteora Web. Esperto in architetture software, sicurezza informatica e sviluppo sistemi scalabili.
[ Read Full Dossier ]

> METEORA_WEB // WEB AGENCY

Costruiamo la presenza digitale che la tua azienda merita.

Siti web, social, pubblicità online, e-commerce e hosting performante: ingegnerizzati con metodo da ingegneri informatici a Sciacca, per tutta Italia.

> MW_JOURNAL

> READ_ALL()