Vai al contenuto

Impostazioni cookie

Scelga per ogni tipo quali cookie consente. Può modificare la sua scelta in qualsiasi momento tramite Impostazioni cookie in fondo a ogni pagina. Informativa sulla privacy

Necessari

Sempre attivi

Servono per accedere, conservare il carrello e ricordare le sue scelte. Sono sempre attivi.

Quali cookie?
  • weboke_sessie, weboke_klant, weboke_remember: la sua sessione e la permanenza dell'accesso
  • weboke_basket: il suo carrello
  • wkBtwIncl: visualizzazione dei prezzi con o senza IVA
  • wok_cookies: la sua scelta sui cookie, 12 mesi

Misurano quale annuncio porta a una visita o a un ordine, così non paghiamo annunci che non funzionano.

Quali cookie?
  • Google Ads tramite Google Tag Manager (_gcl_au, _gcl_aw), fino a 90 giorni
  • OpenAI Ads, annunci in ChatGPT
  • wok_aff: tramite quale partner è arrivato da noi (programma di affiliazione), 60 giorni

4,6

Paese e lingua

Ogni paese ha il suo sito, con i prezzi e l'IVA di quel paese.

Vedi

Usare SSH in modo intelligente

Modulo 2: SSH e chiavi · Tempo di lettura: 10 minuti

Obiettivo della lezione: dopo questa lezione saprà usare SSH comodamente ogni giorno con un Suo file di configurazione, copiare file con scp e rsync e raggiungere un database tramite un tunnel, senza dover aprire la porta del database verso internet.

Concetti chiave: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding, -L, tunnel, ProxyJump, ServerAliveInterval, numero di porta diverso, revoca di una chiave

Scrivere meno con ~/.ssh/config

Dopo qualche settimana digiterà questo decine di volte al giorno:

anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10

Con un file di configurazione per il client il comando diventa più breve e si commettono meno errori. Il file si trova sul Suo computer: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, senza estensione).

Host web1
    HostName 192.0.2.10
    User anna
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60

Host test
    HostName test.example.com
    User anna
    Port 2222

Ora basta scrivere:

anna@laptop:~$ ssh web1
anna@web1:~$

Che cosa fanno queste righe?

  • Host è il soprannome che sceglie Lei. Lo scrive dopo ssh, scp e rsync.
  • HostName è l'indirizzo reale: un indirizzo IP o un nome presente nel DNS.
  • User e Port sono il nome utente e la porta, così non deve più ricordarli.
  • IdentityFile indica la chiave. È utile se ha più chiavi; senza questa riga ssh prova le Sue chiavi predefinite.
  • ServerAliveInterval 60 invia ogni 60 secondi un piccolo segnale di vita. Molti router domestici e reti wifi interrompono una connessione inattiva dopo qualche minuto; con questa opzione la Sua sessione resta aperta.

Anche qui vale il primo valore trovato, come sul server. Metta quindi le regole generali come Host * in fondo al file.

Copiare file: scp, rsync e sftp

scp copia un file, con la stessa forma di cp, ma con host: davanti:

anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .

rsync è più intelligente con le cartelle e con grandi quantità di dati: invia solo ciò che è cambiato e può riprendere una copia interrotta. Deve essere installato su entrambi i lati (apt install rsync).

anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/

Faccia attenzione alla barra dopo ./site/: con la barra rsync copia il contenuto della cartella, senza la barra copia la cartella stessa (otterrà allora /var/www/example.com/site/). In caso di dubbio provi prima con --dry-run, e sia molto prudente con --delete, che sul lato ricevente elimina tutto ciò che da Lei non esiste.

sftp e i programmi grafici come FileZilla o WinSCP usano la stessa connessione SSH e la stessa chiave. Non serve quindi un server FTP separato. Un vecchio server FTP su un VPS è sconsigliato: il normale FTP invia la Sua password in chiaro sulla rete.

Un tunnel invece di una porta aperta

Questa è forse la funzione più utile di SSH. Supponiamo che sul Suo server giri un database PostgreSQL e che Lei voglia accedervi dal Suo portatile con un programma grafico. La tentazione di aprire la porta 5432 verso internet è forte. Non lo faccia: le porte dei database aperte sono una delle cause principali delle violazioni di dati (lezione 10.2), e più avanti il corso verifica dall'esterno che siano chiuse (esercizio Z5.1).

Con il port forwarding locale fa creare a SSH un tunnel:

anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1

Lo legga così: "ascolta sul mio portatile sulla porta 5432 e invia tutto ciò che arriva lì, attraverso la connessione SSH, a 127.0.0.1:5432, visto dal server". Finché questa sessione è aperta, collega il Suo programma per database a localhost porta 5432 sul Suo portatile, e arriva al database sul server.

Perché è una soluzione così valida?

  • Il database ascolta solo su 127.0.0.1 sul server ed è irraggiungibile dall'esterno.
  • La connessione è cifrata da SSH, anche se il database stesso non usa la cifratura.
  • Può accedervi solo chi può effettuare il login con SSH. Usa quindi la protezione robusta che ha già.

Se sul Suo portatile c'è già qualcosa sulla 5432, scelga a sinistra un altro numero: -L 15432:127.0.0.1:5432, e si colleghi alla porta 15432. Se inserisce il tunnel in ~/.ssh/config, lo avrà sempre a portata di mano:

Host web1-db
    HostName 192.0.2.10
    User anna
    LocalForward 15432 127.0.0.1:5432

Con ssh -N web1-db ottiene solo il tunnel, senza riga di comando.

Tramite un server intermedio: ProxyJump

A volte un server è raggiungibile solo passando per un altro, per esempio un server di database senza indirizzo IP pubblico dietro il Suo server web. ProxyJump passa dal primo server per arrivare al secondo:

Host db1
    HostName 10.0.0.5
    User anna
    ProxyJump web1

La differenza con l'agent forwarding (lezione 2.1): con ProxyJump la cifratura va da un capo all'altro, tra il Suo portatile e db1. Il server intermedio si limita a inoltrare i pacchetti e non può usare la Sua chiave.

Un numero di porta diverso: sì o no?

Molte guide consigliano di spostare SSH su un'altra porta, per esempio 2222. Che effetto ha davvero?

  • Riduce il rumore: la maggior parte dei tentativi automatici di indovinare le credenziali prova solo la porta 22. Il Suo log diventa più tranquillo.
  • Non è una misura di sicurezza. Uno scanner che controlla tutte le porte trova SSH in pochi secondi grazie al suo banner di versione.

Con le chiavi e il login con password disattivato (lezione 2.2), la porta conta poco per la sicurezza. Se vuole comunque cambiarla, lo faccia nell'ordine giusto: aprire la nuova porta nel firewall, far ascoltare SSH su entrambe le porte, provare in una seconda finestra e solo allora chiudere la vecchia porta. Su Ubuntu 24.04 e versioni successive servono anche systemctl daemon-reload e systemctl restart ssh.socket (lezione 2.2). Non dimentichi che anche il Suo provider potrebbe avere un firewall.

Revocare l'accesso

Un ex collega o uno sviluppatore web aveva una chiave sul Suo server e non lavora più per Lei? Revocare l'accesso è semplice, se tiene traccia delle chiavi:

  1. Controlli tutte le chiavi: ssh-keygen -lf ~/.ssh/authorized_keys, e lo faccia per ogni utente (anche /root/.ssh/authorized_keys).
  2. Elimini la riga di quella persona.
  3. Se usava un account utente proprio, lo blocchi (lezione 3.1) e verifichi se faceva parte del gruppo sudo (lezione 3.2).
  4. Se ha visto delle password, per esempio la password di un database in un file di configurazione, cambi anche quelle.

Una chiave normale non ha una data di scadenza. Ciò che non elimina continua a funzionare, anche anni dopo. Se concede a qualcuno un accesso temporaneo, può mettere prima della sua riga in authorized_keys l'opzione expiry-time="20261231"; dopo quella data il server rifiuta la chiave.

Riepilogo

  • ~/.ssh/config sul Suo computer conserva per ogni server il nome, l'utente, la porta e la chiave; Host * va in fondo.
  • scp per singoli file, rsync per le cartelle (attenzione alla barra e a --delete), sftp al posto di FTP.
  • Con ssh -L raggiunge un database tramite un tunnel cifrato, mentre la porta del database resta chiusa dall'esterno.
  • ProxyJump passa in sicurezza per un server intermedio; è meglio dell'agent forwarding.
  • Un numero di porta diverso riduce il rumore, ma non protegge. Le chiavi che non elimina continuano a funzionare.

Quiz

1. Che cosa fa ssh -L 15432:127.0.0.1:5432 web1?



2. Perché un tunnel SSH verso un database è meglio che aprire la porta 5432 nel firewall?



3. Sposta SSH sulla porta 2222. Qual è l'effetto principale?



4. Nel Suo ~/.ssh/config c'è in cima Host * con User root, e più in basso Host web1 con User anna. Con quale utente effettua il login su ssh web1?



5. Uno sviluppatore web aveva una sua chiave SSH sul Suo server e non lavora più per Lei. Che cosa NON è sufficiente?



Esercizio

Esercizio O2.3: Una configurazione SSH e un tunnel. Crei sul Suo computer un ~/.ssh/config con un soprannome per il Suo server, effettui il login con solo ssh <bijnaam>, copi un file con scp o rsync e crei un tunnel con -L verso un servizio che sul Suo server ascolta solo su 127.0.0.1 (se non ha ancora un database, usi la porta 22 del server stesso: ssh -L 2200:127.0.0.1:22 <bijnaam> e poi ssh -p 2200 anna@localhost). Risponda alle domande su che cosa fa il tunnel e perché non è necessario aprire la porta.

Esercizio O2.3: Una configurazione SSH e un tunnel

Questo esercizio lo svolge da sé; nessuno lo verifica. Spunti ciò che ha fatto e segni l'esercizio come completato.




Le Sue spunte e note restano solo in questo browser; non le inviamo da nessuna parte. Se ha effettuato l'accesso, conserviamo in I miei corsi solo il fatto che ha svolto l'esercizio.

Per approfondire

I passaggi descritti in questi articoli valgono per i VPS e i pannelli di WebOké; con altri provider la procedura è simile.

Un momento…

Configuri i suoi domini

Per ogni dominio imposti i nameserver, il collegamento al suo hosting e chi ne diventa l'intestatario.

Caricamento dei suoi domini…