SSH o SFTP: cosa cambia e quale usare sul tuo server

SSH e SFTP fanno cose diverse. Scopri quando usare l'uno o l'altro e come configurarli correttamente sul tuo server self-hosted.

Se gestisci un server, un NAS o qualsiasi servizio self-hosted, prima o poi ti troverai davanti a una scelta: usare SSH o SFTP per accedere ai tuoi file e al tuo sistema. I due termini appaiono spesso insieme, vengono talvolta usati come sinonimi, ma non sono la stessa cosa. Capire la differenza ti aiuta a configurare l’accesso nel modo giusto, con il livello di sicurezza appropriato per ogni situazione.

In questa guida vediamo cosa sono, come funzionano e quando usare SSH o SFTP.

SSH: l’accesso completo al tuo server

SSH (Secure Shell) è un protocollo che ti permette di connetterti a un server remoto in modo cifrato e di controllarlo come se fossi fisicamente davanti a lui. È lo strumento principale di chi amministra server Linux, container, VPS e NAS.

Con SSH puoi:

  • Aprire un terminale remoto ed eseguire comandi
  • Avviare, fermare e monitorare servizi
  • Modificare file di configurazione
  • Creare tunnel cifrati per accedere a risorse interne
  • Automatizzare operazioni con script

Il punto chiave di SSH è che dà accesso completo al sistema. Chi si connette via SSH con le credenziali giuste può fare praticamente tutto ciò che farebbe un amministratore locale.

Connettersi via SSH: i comandi di base

La connessione più semplice richiede solo utente e indirizzo del server:

ssh utente@192.168.1.100

Se il server ascolta su una porta diversa dalla 22 (pratica comune per ridurre i tentativi automatici di intrusione):

ssh -p 2222 utente@192.168.1.100

Autenticazione: password o chiave crittografica

SSH supporta due metodi di autenticazione principali. Il primo è la classica password, semplice ma esposta ad attacchi di forza bruta se il server è esposto su internet. Il secondo è l’autenticazione con chiave, dove si generano una chiave pubblica (da caricare sul server) e una chiave privata (da tenere sul proprio dispositivo): senza la chiave privata, l’accesso è impossibile anche conoscendo la password.

Per generare una coppia di chiavi sul tuo computer:

ssh-keygen -t ed25519 -C "homelab"

Questo crea due file: ~/.ssh/id_ed25519 (chiave privata, non condividere mai) e ~/.ssh/id_ed25519.pub (chiave pubblica, da copiare sul server). Per caricarla automaticamente:

ssh-copy-id utente@192.168.1.100

Da quel momento potrai accedere senza inserire la password. Per chi gestisce server self-hosted esposti su internet, l’autenticazione con chiave non è un’opzione avanzata: è la baseline minima consigliata.

Tunnel SSH: accedere a servizi interni senza aprire porte

Una funzionalità meno conosciuta ma molto utile è il port forwarding. SSH può creare un tunnel cifrato tra il tuo computer e un servizio interno al server, come se quel servizio fosse in esecuzione localmente.

Un esempio pratico: hai Portainer (la GUI per Docker) che gira sulla porta 9000 del tuo server, ma non vuoi esporla su internet. Con questo comando:

ssh -N -L 9000:localhost:9000 utente@192.168.1.100

puoi aprire http://localhost:9000 sul tuo browser e raggiungere Portainer attraverso il tunnel SSH, senza aprire nessuna porta sul firewall. Lo stesso principio funziona per Grafana, Home Assistant, database, e qualsiasi altro servizio interno.


SFTP: solo i file, niente di più

SFTP (SSH File Transfer Protocol) è un protocollo di trasferimento file che usa SSH come layer di trasporto cifrato per autenticazione e cifratura, ma invece di aprirti un terminale ti offre solo la possibilità di gestire file: caricare, scaricare, rinominare, cancellare, navigare tra le cartelle.

Non si tratta di FTP con SSH sopra, come il nome potrebbe far pensare: è un protocollo completamente diverso, progettato per essere sicuro fin dall’inizio.

Con SFTP puoi:

  • Caricare e scaricare file in modo sicuro
  • Navigare e gestire directory remote
  • Rinominare e cancellare file
  • Impostare permessi sui file

Le stesse credenziali SSH, zero configurazione aggiuntiva

Un dettaglio che sorprende chi si avvicina per la prima volta: SFTP non richiede un account separato. Usa esattamente le stesse credenziali SSH, perché gira sopra la stessa connessione. Se riesci ad accedere al server via SSH con utente e password (o con la tua chiave), puoi usare quelle stesse credenziali per connetterti via SFTP. Non c’è nulla da configurare in più sul server, a meno che tu non voglia creare utenti dedicati con accesso limitato (lo vediamo più avanti).

Connettersi via SFTP: da riga di comando e con FileZilla

Da terminale, la connessione SFTP funziona come SSH, ma apre una sessione interattiva per la gestione file invece di un terminale:

sftp utente@192.168.1.100

Una volta connesso, i comandi più utili sono:

ls              # elenca i file nella directory remota
lls             # elenca i file nella directory locale
cd cartella     # entra in una cartella remota
lcd cartella    # entra in una cartella locale
get file.txt    # scarica un file dal server
put backup.tar  # carica un file sul server
mkdir archivio  # crea una cartella remota
exit            # chiude la sessione

Per trasferire file senza aprire una sessione interattiva, puoi anche usare sftp in modalità batch. Questo è utile negli script di backup:

sftp utente@192.168.1.100 <<EOF
put /backup/dati.tar.gz /uploads/dati.tar.gz
exit
EOF

Se preferisci un’interfaccia grafica, FileZilla è il client gratuito più diffuso e funziona su Windows, macOS e Linux. Per connettersi via SFTP basta aprire il Site Manager, scegliere il protocollo SFTP, inserire indirizzo, porta, utente e password (o indicare il file della chiave privata nella sezione dedicata). FileZilla mostra i file locali e remoti affiancati e permette di trascinare i file da un lato all’altro, rendendo i trasferimenti accessibili anche a chi non ama la riga di comando.

Perché SFTP è più sicuro di SSH per certi accessi

Quando dai accesso SFTP a qualcuno, puoi configurare il server in modo che quella persona non possa aprire un terminale, non possa eseguire comandi, e non possa uscire da una cartella specifica. Si chiama accesso in chroot: l’utente vede solo la directory che gli hai assegnato, come se fosse l’unica esistente sul server.

Questo è fondamentale quando devi condividere l’accesso con qualcuno di cui ti fidi per caricare file, ma a cui non vuoi dare controllo sull’intero sistema: un collaboratore, un servizio automatizzato, un backup remoto.

Creare un utente solo-SFTP con accesso limitato

Ecco la configurazione completa per un utente che può solo caricare file in una cartella dedicata, senza mai accedere alla shell. I comandi sono testati su Debian e Ubuntu; su altre distribuzioni il percorso di nologin o il comando di ricarica del servizio potrebbero differire.

Prima crea l’utente e la cartella:

sudo useradd -s /usr/sbin/nologin -m backup_remoto
sudo mkdir -p /sftp/backup_remoto/uploads
sudo chown root:root /sftp/backup_remoto
sudo chown backup_remoto /sftp/backup_remoto/uploads

Poi aggiungi queste righe in fondo a /etc/ssh/sshd_config:

Match User backup_remoto
    ChrootDirectory /sftp/backup_remoto
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

Infine ricarica SSH:

sudo systemctl reload sshd

Da questo momento backup_remoto può connettersi via SFTP e accedere solo alla cartella uploads, senza possibilità di navigare nel resto del sistema o aprire un terminale.

Confronto pratico

CaratteristicaSSHSFTP
Accesso al terminaleNo
Trasferimento fileSolo con strumenti aggiuntivi (SCP)Sì, nativo
Esecuzione di comandiNo
Accesso limitato a una cartellaNo (di default)Sì, con chroot
CifraturaSì, nativa
Adatto a terze partiNo
Porta utilizzata2222 (stessa di SSH)

Quale scegliere?

La risposta dipende da cosa devi fare e a chi stai dando l’accesso.

Scegli SSH quando:

  • Sei tu ad accedere al tuo server per amministrarlo
  • Devi eseguire comandi, gestire servizi o configurare il sistema
  • Vuoi creare tunnel per raggiungere risorse interne
  • Stai automatizzando operazioni con script

Scegli SFTP quando:

  • Devi caricare o scaricare file senza bisogno di accedere al terminale
  • Vuoi dare accesso a un collaboratore o a un servizio esterno limitandolo a una cartella
  • Stai configurando backup automatici verso il server
  • Vuoi ridurre al minimo la superficie di attacco

Se gestisci un NAS come Synology o QNAP, troverai spesso entrambi i protocolli già disponibili nelle impostazioni. In quel caso, abilita SFTP per i trasferimenti file e limita SSH solo agli account amministratori di cui hai reale bisogno.

Errori frequenti da evitare

Dare accesso SSH quando basterebbe SFTP. Se un servizio deve solo caricare file, non ha bisogno di un terminale. Meno privilegi si concedono, meno danni può causare una credenziale compromessa.

Lasciare SSH aperto su internet con password semplici. I bot che cercano server SSH esposti sulla porta 22 sono attivi 24 ore su 24. Se SSH è accessibile dall’esterno, usa sempre l’autenticazione con chiave e considera di cambiare la porta di ascolto. Per disabilitare del tutto l’accesso con password, imposta in /etc/ssh/sshd_config:

PasswordAuthentication no

Confondere SFTP con FTP. FTP è un protocollo vecchio e non cifrato: trasmette credenziali e file in chiaro. SFTP (SSH File Transfer Protocol) è un sottosistema del protocollo SSH-2, progettato da Tatu Ylönen, lo stesso autore di SSH. Non è FTP cifrato, non è FTP su SSH: è un protocollo binario completamente diverso, con un formato dei pacchetti, un set di comandi e un’architettura di connessione propri. FTP apre due canali TCP separati (uno per il controllo, uno per i dati) e comunica tramite comandi testuali come USER, PASS, RETR. SFTP usa un singolo canale cifrato sulla porta 22 e pacchetti binari senza alcuna compatibilità con FTP.

Conclusione

SSH e SFTP non sono in competizione: si completano. SSH ti dà il controllo completo del sistema, SFTP ti permette di scambiare file in modo sicuro senza aprire quella porta. Per chi gestisce server self-hosted, la configurazione ideale prevede SSH riservato agli amministratori autenticati con chiave, e SFTP per tutto ciò che riguarda il trasferimento file, soprattutto quando sono coinvolti servizi automatizzati o accessi esterni.

Pochi minuti dedicati a separare questi due livelli di accesso possono evitare molti problemi in futuro.

emanuelegori
emanuelegori

Emanuele Gori scrive di software libero, privacy digitale e self-hosting.
Homelab Notes nasce dalla convinzione che la tecnologia debba servire chi la usa, non chi la vende. Qui trovi guide pratiche e analisi per riprendere il controllo della tua vita digitale, un servizio alla volta.
Sul Fediverso come nella vita: senza algoritmi di mezzo.
Quando non scrive, è online nel Fediverso con spirito indipendente e tanta voglia di condividere conoscenza.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Leave the field below empty!