Marvin Pascale

[B.Log]

31 Dicembre 2025

SSH per chi ci vive dentro

Remote Connect

SSH è una di quelle tecnologie che usiamo ogni giorno, quasi in automatico: ci connettiamo, copiamo file, facciamo tunnel verso servizi remoti — e raramente ci chiediamo se potremmo farlo meglio.
Partendo da una semplice “cheat sheet” piena di comandi copia‑e‑incolla, ho provato a trasformare tutto in una guida ragionata: più ordine, più sicurezza, meno fatica.

SSH oltre la cheat sheet

Le cheat sheet elencano opzioni utili, ma difficilmente aiutano a costruire un flusso di lavoro stabile. L’idea di fondo è semplice: spostare la complessità nei file giusti e fare in modo che SSH lavori per noi, non contro di noi.
In pratica significa:

  • gestire correttamente le chiavi;
  • usare davvero ~/.ssh/config;
  • velocizzare le connessioni con multiplexing;
  • passare senza dolore da un bastion all’altro;
  • rendere più sicuro il server SSH.

Mani in pasta

Se ancora usi rsa da 4096 bit, è ora di cambiare. Le chiavi ed25519 sono oggi lo standard: rapide, sicure e più semplici da gestire.

NB: RSA funziona ancora, ma richiede chiavi grandi ed è più fragile dal punto di vista implementativo. ed25519 nasce invece con criteri moderni: è più veloce, più sicuro a parità di forza crittografica e riduce drasticamente gli errori. Per questo oggi è lo standard consigliato per SSH.

Creare una chiave moderna

ssh-keygen -t ed25519 -a 100 -C "marvin@laptop"

Questo comando genera la chiave privata (id_ed25519) e la pubblica (id_ed25519.pub).
Proteggila con una passphrase robusta: ti salva se la chiave finisce su un disco sbagliato.

Per installarla sul server, usa ssh-copy-id:

ssh-copy-id [email protected]

e dimentica il copia‑incolla su authorized_keys.

Alcune buone abitudini

  • Una chiave per persona, non per gruppo.
  • Chiavi distinte per contesti diversi (lavoro, test, personale).
  • Permessi stretti (chmod 600) sulla directory ~/.ssh.
  • Rotazione periodica e controllo delle chiavi presenti sui server.

Multiplexing e jump host

SSH non serve solo a “entrare in un server”.
Con un paio di opzioni si può rendere tutto più veloce e flessibile.

Multiplexing: connessioni istantanee

Nel tuo ~/.ssh/config puoi impostare:

Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 10m

La prima connessione apre il canale, le successive lo riutilizzano.
scp, git, rsync: tutto diventa immediato.

Jump host con ProxyJump

Chi lavora dietro bastion lo sa bene: due SSH aperti in cascata sono un incubo.

Host bastion
    HostName bastion.example.com
    User marvin

Host internal-*
    ProxyJump bastion
    User marvin

Con questa configurazione:

ssh internal-db01

salta automaticamente attraverso bastion, senza comandi lunghi o doppi hop manuali.

Port forwarding e tunnel

Due righe che salvano la giornata:

  • Local forwarding: accedi localmente a un servizio remoto.

    ssh -L 8080:localhost:80 marvin@server
    
  • Remote forwarding: esponi un servizio locale verso un server remoto.

    ssh -R 2222:localhost:22 marvin@server
    

Tunnel potentissimi, ma da usare con prudenza: su server multi‑utente o esposti pubblicamente, possono creare canali imprevisti verso reti interne.

Gestione avanzata di ~/.ssh/config

Per chi amministra decine, centinaia o migliaia di macchine, il file ~/.ssh/config diventa un piccolo capolavoro di configurazione. Ecco le opzioni per sysadmin esperti.

Include per configurazioni esterne

Suddividi la config in file tematici:

~/.ssh/config:
Include config-work.conf
Include config-lab.conf
# ~/.ssh/config-work.conf
Host work-*
    User marvin
    IdentityFile ~/.ssh/id_ed25519_work
    ProxyJump bastion.work.example.com

Così gestisci ambienti separati senza un file monolitico ingestibile.

Match per condizioni dinamiche

Applica regole basate su rete, utente o altro:

Match exec "ip route | grep -q via 10.0.0.1"
    ProxyJump vpn-gateway

Match user root final
    PermitLocalCommand no
  • Il primo Match attiva automaticamente il jump se sei dietro una VPN specifica.
  • Il secondo blocca comandi locali pericolosi quando ti connetti come root.

Esempi pratici per Proxmox e container

Per chi usa Proxmox o swarm:

Host px-*
    HostName %h.proxmox.local
    User root
    Port 22
    IdentityFile ~/.ssh/id_ed25519_proxmox

Host swarm-*
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519_swarm
    ControlPersist 1h

ssh px-node01 ti porta direttamente sul nodo Proxmox; ssh swarm-worker03 si connette al worker Docker con multiplexing lungo (1 ora).

Mettere in sicurezza SSH lato server

Lato server, l’obiettivo è abbattere la superficie d’attacco e rendere più difficile ogni tentativo di accesso non autorizzato.

Impostazioni consigliate in /etc/ssh/sshd_config

Protocol 2
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers marvin backup

Cosa andiamo a fare:

  • vietare il login diretto di root;
  • disabilitare l’autenticazione con password;
  • limitare i tentativi di accesso;
  • consentire solo gli utenti esplicitamente previsti.

In più, usare fail2ban, un firewall che limiti gli IP ammessi, o servizi come CrowdSec può ridurre drasticamente gli attacchi automatizzati.

Una SSH “ordinata” e sicura

In breve:

  • chiavi ed25519, una per contesto e protetta da passphrase:
  • ~/.ssh/config curato con alias, multiplexing, Include e Match per scenari complessi;
  • ProxyJump per lavorare dietro bastion senza fatica;
  • server senza accesso con password, login root disabilitato e regole di accesso minime;
  • monitoraggio e rotazione delle chiavi nel tempo.

SSH non è solo un comando da terminale, è parte della tua infrastruttura personale.
Fatta bene, ti toglie attrito e riduce i rischi. Fatta male, diventa la scorciatoia più pericolosa del tuo sistema.


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: