SFTP è un protocollo per trasferire e gestire file remoti attraverso una connessione protetta, normalmente sfruttando l’infrastruttura SSH. Se il tuo hosting o server ti fornisce questo tipo di accesso, puoi caricare, scaricare, rinominare ed eliminare file senza inviare credenziali e contenuti in chiaro come accade con il normale FTP.

La distinzione importante è questa: SFTP non è semplicemente FTP reso sicuro. È un protocollo differente. FTPS mantiene invece il protocollo FTP e aggiunge la protezione tramite TLS.

Nella pratica, se devi amministrare i file di un sito WordPress, lavorare su un VPS o gestire un server Linux, è spesso una delle opzioni più comode quando l’accesso SSH è disponibile.

In questa guida vediamo come funziona, quale porta utilizza, come collegarti da terminale o con un client grafico, quali sono i principali comandi SFTP e come diagnosticare una connessione che non funziona.

Cos’è SFTP e come funziona

SFTP significa SSH File Transfer Protocol ed è un protocollo progettato per il trasferimento dei file e, più in generale, per operazioni sul filesystem remoto attraverso un canale sicuro.

Quando viene utilizzato insieme a SSH, opera normalmente come un sottosistema della connessione SSH. Il client non apre quindi una normale sessione FTP e non aggiunge successivamente un livello di cifratura: utilizza direttamente l’infrastruttura messa a disposizione da Secure Shell.

Se vuoi capire prima come vengono gestiti autenticazione, host key e connessione protetta, trovi questi meccanismi spiegati nella nostra guida a SSH e Secure Shell.

SSH File Transfer Protocol: perché non è semplicemente “FTP sicuro”

La sigla SFTP viene talvolta interpretata come “Secure File Transfer Protocol”. È una descrizione intuitiva del suo scopo, ma può creare un equivoco.

Il punto tecnico da ricordare è che SFTP e FTP non sono lo stesso protocollo.

FTP utilizza una connessione di controllo separata dal canale utilizzato per trasferire i dati. Il primo utilizza invece il canale sicuro fornito dall’infrastruttura SSH e definisce proprie operazioni per leggere, scrivere e gestire file e directory.

Per questo selezionare “SFTP” in FileZilla o in un altro client non equivale a scegliere FTP e attivare semplicemente una casella di cifratura.

Se vuoi approfondire il funzionamento del protocollo tradizionale e il suo utilizzo con un sito, puoi leggere anche la guida su FTP e WordPress.

Client e server SFTP: cosa succede quando apri una connessione

Per effettuare il trasferimento servono due estremi.

Il client SFTP è il programma dal quale avvii la connessione. Può essere il comando sftp di OpenSSH oppure un’applicazione grafica come FileZilla.

Sul lato remoto deve invece esistere un servizio che accetti la connessione e metta a disposizione il relativo sottosistema.

In un tipico server Linux con OpenSSH il processo può essere schematizzato così:

  1. il client raggiunge il servizio SSH del server;
  2. viene stabilito il trasporto protetto;
  3. il client verifica l’identità del server attraverso la host key;
  4. l’utente viene autenticato con il metodo previsto;
  5. viene aperto il sottosistema sftp;
  6. client e server possono scambiarsi richieste relative a file e directory.

Questo modello spiega anche perché SFTP e SSH utilizzano normalmente la stessa porta e perché un problema nella configurazione SSH può impedire anche il trasferimento dei file.

Schema del funzionamento SFTP tra client, connessione SSH e filesystem del server remoto
SFTP utilizza normalmente l’infrastruttura SSH per accedere e trasferire file sul server remoto.

Per una spiegazione più generale dei ruoli client e server puoi consultare anche la guida su cos’è un server.

Sicurezza SFTP: cosa protegge realmente SSH

Il vantaggio principale di SFTP è che il traffico viaggia attraverso un canale SSH protetto.

Questo permette di proteggere durante il trasferimento informazioni come:

  • credenziali di autenticazione;
  • contenuto dei file;
  • comandi e operazioni eseguite;
  • informazioni scambiate durante la sessione.

SSH aggiunge inoltre meccanismi per verificare l’identità del server e l’integrità della comunicazione.

Questo però non significa che qualunque server SFTP sia automaticamente sicuro.

Una chiave privata rubata, una password debole, permessi troppo ampi, un account compromesso o una host key accettata senza verificarla rimangono problemi reali. Il protocollo protegge il trasporto e utilizza i meccanismi di autenticazione di SSH; non sostituisce una corretta configurazione del server e degli account.

Qual è la porta SFTP e quando può essere diversa dalla 22

SFTP utilizza normalmente la porta TCP 22, perché è la porta assegnata a SSH.

Non esiste quindi una porta indipendente da utilizzare sempre e comunque: quando il protocollo viene eseguito attraverso SSH, segue la porta sulla quale il servizio SSH del server è configurato.

Se il provider utilizza la configurazione standard, i dati possono essere per esempio:

Protocollo: SFTP
Host: server.example.com
Porta: 22
Utente: nomeutente

Un server può però utilizzare una porta differente.

Perché SFTP utilizza normalmente la porta SSH

Il protocollo non apre una connessione FTP separata. Normalmente viene avviato all’interno dell’infrastruttura SSH.

Per questo, se il servizio SSH ascolta sulla porta 22, anche la connessione SFTP raggiungerà quella porta.

La documentazione del protocollo SSH assegna proprio la porta 22 alle connessioni SSH su TCP/IP.

Questo è anche il motivo per cui non dovresti correggere una connessione FTP che non funziona cambiando semplicemente la porta da 21 a 22: facendo così potresti stare cambiando completamente protocollo.

Come collegarsi quando il server usa una porta personalizzata

Con il client OpenSSH puoi specificare una porta diversa utilizzando -P:

sftp -P 2222 [email protected]

Il valore 2222 è solo un esempio. Devi utilizzare la porta indicata dal tuo hosting o configurata sul server.

OpenSSH permette anche di passare opzioni SSH attraverso -o, quindi rimane valida una forma come:

sftp -oPort=2222 [email protected]

Per una connessione normale, però, -P rende l’intento più immediatamente leggibile.

SFTP, FTP e FTPS: quali sono le differenze

FTP, FTPS e SFTP permettono tutti di trasferire file, ma funzionano in modo differente e non sono intercambiabili.

ProtocolloProtezionePorta normalmente utilizzataModello di connessioneQuando usarlo
FTPNessuna cifratura nativa21 per il controlloCanale di controllo + connessione datiSolo quando richiesto e l’assenza di cifratura è accettabile
FTPSTLSspesso 21 in modalità esplicita; altri scenari sono possibiliFTP con protezione TLSQuando il server offre FTP protetto tramite TLS
SFTPSSHgeneralmente 22Attraverso la connessione SSHQuando il server offre accesso SFTP/SSH

Le porte riportate sono valori comuni, non parametri da imporre. Utilizza sempre protocollo, host e porta comunicati dal provider o dall’amministratore del server.

SFTP vs FTP

FTP è il protocollo storico per il trasferimento di file.

Il suo modello prevede una connessione di controllo per comandi e risposte e una connessione dedicata ai dati. Nel normale FTP queste comunicazioni non ricevono la protezione crittografica offerta da SSH.

SFTP utilizza invece un protocollo differente e lavora attraverso il canale sicuro.

La conseguenza pratica è che non devi configurarlo come se fosse FTP cambiando soltanto la porta.

Se il tuo hosting dice:

Protocollo: SFTP
Porta: 22

devi selezionare esplicitamente SFTP nel client.

SFTP vs FTPS

FTPS può offrire trasferimenti protetti, ma arriva allo stesso obiettivo con un’architettura differente.

FTPS è FTP con supporto TLS, mentre SFTP è un protocollo di trasferimento file collegato all’ecosistema SSH.

La scelta non dipende quindi dal fatto che uno dei due sia sempre “migliore”.

In un hosting reale la prima domanda è:

quale protocollo sicuro supporta e configura il server?

Se viene fornito SFTP, utilizza SFTP. Se il provider mette a disposizione FTPS e non SFTP, configura correttamente FTPS.

Come connettersi a un server SFTP

Per effettuare la connessione devi recuperare alcuni parametri dal provider, dal pannello hosting o dall’amministratore della macchina.

Normalmente ti servono:

  • hostname o indirizzo IP;
  • nome utente;
  • porta;
  • password oppure chiave SSH;
  • eventuale directory remota iniziale.

Non presumere che lo username del pannello hosting coincida con quello dell’accesso remoto o che l’host sia necessariamente il dominio pubblico del sito.

Host, username, porta, password e chiave SSH: cosa serve

Un collegamento semplice può essere rappresentato così:

Host: server.example.com
Porta: 22
Username: deploy
Autenticazione: password oppure chiave SSH

Se viene utilizzata una password, il client te la richiederà durante la connessione.

Con autenticazione tramite chiave pubblica, invece, il server deve conoscere una chiave pubblica autorizzata e il client deve poter utilizzare la relativa chiave privata.

Non confondere la private key dell’utente con la host key del server. Hanno funzioni differenti:

  • la host key serve al client per verificare il server;
  • la chiave dell’utente può essere utilizzata per dimostrare che sei autorizzato ad accedere.

Collegarsi da terminale

Su un sistema che dispone del client OpenSSH, la sintassi più semplice è:

sftp [email protected]

Oppure con un indirizzo IP:

sftp [email protected]

Al primo accesso a un server potresti vedere una richiesta relativa alla sua host key e alla fingerprint.

Non confermarla meccanicamente se il server contiene dati importanti: quando possibile confronta la fingerprint con quella fornita dall’amministratore o dal provider.

Una volta completata autenticazione e apertura del sottosistema, compare normalmente il prompt:

sftp>

Da questo momento puoi utilizzare i comandi interattivi descritti più avanti.

Usare una porta personalizzata e una chiave SSH

Per specificare una porta:

sftp -P 2222 [email protected]

Per indicare una particolare chiave privata:

sftp -i ~/.ssh/mia_chiave [email protected]

Le opzioni possono essere combinate:

sftp -P 2222 -i ~/.ssh/mia_chiave [email protected]

Se gestisci regolarmente più server, può essere ancora più pratico impostare host, porta, utente e identity file in ~/.ssh/config, come spiegato nella nostra guida a SSH.

Collegarsi con un client grafico come FileZilla

Non sei obbligato a lavorare da terminale.

Un client grafico è spesso più pratico quando devi confrontare cartelle, trascinare file o gestire molti trasferimenti.

Con FileZilla, per esempio, devi creare una connessione specificando:

Protocollo: SFTP
Host: server.example.com
Porta: 22
Utente: nomeutente
Password o chiave: secondo la configurazione

La cosa importante è selezionare SFTP come protocollo, non “FTP” con la porta 22.

Per configurazione, Gestore Siti e troubleshooting trovi una guida completa a FileZilla.

Come scaricare e caricare file con SFTP

Una volta collegato, devi distinguere sempre due filesystem:

  • locale, sul tuo computer;
  • remoto, sul server.

Questa distinzione evita molti errori apparentemente banali.

Puoi verificare le directory correnti con:

sftp> lpwd
Local working directory: /home/utente

sftp> pwd
Remote working directory: /var/www/example

Il prefisso l in diversi comandi indica proprio che l’operazione riguarda il lato locale.

Scaricare file con get

Per trasferire un file dal server al computer utilizza get.

Sintassi:

get remote-file

Per esempio:

get /var/www/example/wp-config.php

Il file viene salvato nella directory locale corrente.

Puoi anche specificare la destinazione:

get /var/www/example/log.txt ~/Downloads/log.txt

Prima di scaricare file sensibili di un sito WordPress, ricorda che documenti come wp-config.php possono contenere informazioni riservate. Conserva le copie locali con permessi e protezioni adeguate.

Caricare file con put

Per la direzione opposta, cioè dal computer al server, il comando corretto è put.

Sintassi:

put local-file

Per esempio:

put ~/Downloads/example.txt /var/www/example/

Questa è una distinzione essenziale:

get = remoto → locale
put = locale → remoto

Prima di sovrascrivere file di produzione verifica sempre di trovarti nella directory corretta e, quando l’operazione è critica, conserva una copia del file precedente.

Trasferire più file con wildcard

Con l’attuale client di OpenSSH non è necessario ricorrere a un comando separato mget o mput per molti dei casi comuni.

get e put possono utilizzare pattern glob.

Per scaricare tutti i file .log di una cartella:

get /var/log/example/*.log

Per caricare più file .css:

put ~/progetto/css/*.css /var/www/example/wp-content/themes/mio-tema/

Quando un pattern corrisponde a più file e specifichi una destinazione, la destinazione deve essere una directory appropriata.

Trasferire intere directory e riprendere un trasferimento

Per una directory puoi utilizzare l’opzione ricorsiva:

get -R /percorso/remoto/cartella

oppure:

put -R ~/cartella-locale /percorso/remoto/

OpenSSH mette inoltre a disposizione reget e reput per riprendere rispettivamente download e upload interrotti:

reget file-grande.zip
reput file-grande.zip

Le operazioni di ripresa presuppongono che la parte già trasferita corrisponda al file sorgente. Se nel frattempo il file è cambiato, continuare il trasferimento può produrre un file corrotto.

Comandi SFTP utili per navigare e gestire file

Uno dei vantaggi del client interattivo è che puoi eseguire molte operazioni senza aprire una normale shell sul server.

Alcuni comandi ricordano quelli Unix, ma non devi considerarli automaticamente equivalenti ai comandi della shell: vengono interpretati dal client e ciò che è disponibile dipende anche dalle funzionalità offerte dal server.

Comandi per directory locali e remote

Per conoscere la directory remota corrente:

pwd

Per quella locale:

lpwd

Per elencare i file remoti:

ls

Per vedere anche dettagli come permessi e proprietà:

ls -l

Per i file locali:

lls

Per spostarti in una directory remota:

cd /var/www/example

Per cambiare directory sul computer:

lcd ~/progetto

Questa coppia cd / lcd è particolarmente utile: evita di perdere il riferimento a quale lato della connessione stai modificando.

Comandi per file, cartelle e permessi

Per creare una directory remota:

mkdir nuova-cartella

Per crearne una locale:

lmkdir nuova-cartella

Per rinominare un file remoto:

rename vecchio-nome.txt nuovo-nome.txt

Per eliminare un file:

rm file.txt

Per eliminare una directory remota vuota:

rmdir cartella

Puoi anche modificare i permessi:

chmod 644 file.txt

oppure, per uno script che deve essere eseguibile:

chmod 755 script.sh

Non scegliere però 777 come soluzione automatica a un errore di permessi. Permessi più ampi del necessario possono introdurre un problema di sicurezza senza risolvere la causa reale.

Il comando chmod disponibile nella sessione SFTP usa gli stessi valori numerici dei permessi Unix, ma conoscere il numero non basta. Per scegliere consapevolmente fra 644, 755, modalità simboliche e altri valori è utile capire come funzionano i permessi chmod e quale accesso viene assegnato a proprietario, gruppo e altri utenti.

OpenSSH espone anche chown e chgrp, ma qui esiste una distinzione importante rispetto a molti comandi di shell.

Per chown il proprietario viene indicato tramite UID numerico:

chown 1001 file.txt

Per chgrp serve invece un GID numerico:

chgrp 1001 file.txt

Inoltre non tutti i server consentono queste operazioni. Hosting gestiti e account limitati possono impedirle deliberatamente.

Anche df -h può mostrare informazioni sul filesystem remoto:

df -h

ma il comando funziona solo se il server implementa l’estensione necessaria.

Cheat sheet dei comandi SFTP

Ecco i comandi più utili da tenere come riferimento rapido.

ComandoFunzione
pwdmostra la directory remota corrente
lpwdmostra la directory locale corrente
lselenca file e directory remoti
llselenca file e directory locali
cd pathcambia directory remota
lcd pathcambia directory locale
get filescarica un file dal server
put filecarica un file sul server
reget fileriprende un download
reput fileriprende un upload
mkdir pathcrea una directory remota
lmkdir pathcrea una directory locale
rename old newrinomina un file remoto
rm pathelimina un file remoto
rmdir pathelimina una directory remota
chmod mode pathmodifica i permessi
chown UID pathmodifica il proprietario tramite UID numerico
chgrp GID pathmodifica il gruppo tramite GID numerico
df -hmostra informazioni sul filesystem, se supportato
progressattiva o disattiva l’indicatore di avanzamento
help o ?mostra l’help disponibile
bye, exit, quitchiude la sessione

Per conoscere l’insieme preciso dei comandi supportati dalla versione installata sul tuo sistema, utilizza:

help

oppure consulta il manuale ufficiale del client SFTP di OpenSSH.

SFTP non si connette: controlli ed errori più comuni

Quando la connessione non funziona, cambiare contemporaneamente porta, password, chiave e hostname rende la diagnosi più difficile.

Conviene capire in quale fase si interrompe la connessione.

Una sequenza utile è:

Host raggiungibile?
↓
Porta corretta?
↓
Servizio SSH attivo?
↓
Host key accettabile?
↓
Autenticazione riuscita?
↓
Sottosistema SFTP disponibile?
↓
Permessi sul file consentiti?

Connection refused o timeout

Un errore:

Connection refused

indica generalmente che la connessione alla destinazione e alla porta scelta non ha potuto aprire la sessione prevista.

Controlla prima:

  • hostname o indirizzo IP;
  • porta;
  • servizio SSH sul server;
  • firewall;
  • configurazione del provider.

Se invece ricevi:

Connection timed out

il traffico potrebbe non raggiungere correttamente il servizio oppure non ricevere risposta.

Fra le possibili cause ci sono server irraggiungibile, porta filtrata, firewall, routing o indirizzo errato.

In entrambi i casi cambiare password non è il primo controllo da fare, perché il problema può verificarsi prima ancora dell’autenticazione.

Permission denied

Permission denied può indicare problemi differenti a seconda del momento in cui compare.

Se viene mostrato durante il login, verifica:

  • nome utente;
  • password;
  • chiave privata utilizzata;
  • chiave pubblica autorizzata sul server;
  • metodo di autenticazione consentito.

Se sei già dentro la sessione e l’errore appare quando provi a caricare, cancellare o rinominare un file, il problema è invece probabilmente legato ai permessi del filesystem o alle restrizioni dell’account.

Per esempio, essere autenticato correttamente non significa automaticamente poter scrivere in /root o nelle directory appartenenti ad altri utenti.

Porta o protocollo sbagliati

Un errore estremamente comune consiste nell’utilizzare:

FTP + porta 22

oppure:

SFTP + porta 21

solo perché una delle due configurazioni precedenti non funzionava.

Non correggere il problema per tentativi.

Controlla prima quale protocollo offre realmente il server:

  • FTP;
  • FTPS;
  • SFTP.

Poi usa la porta prevista per quello specifico servizio.

Problemi con la host key o la chiave SSH

Se il client segnala che la host key del server è cambiata, non eliminare automaticamente il controllo per far sparire l’avviso.

Un cambio può essere perfettamente legittimo, per esempio dopo una reinstallazione o migrazione del server, ma la verifica della host key serve proprio a identificare la macchina remota.

Conferma il cambiamento attraverso una fonte affidabile prima di sostituire la chiave memorizzata.

Se il problema riguarda invece la tua chiave di autenticazione, controlla di utilizzare l’identità corretta:

sftp -i ~/.ssh/mia_chiave [email protected]

Quando gestisci più identità, specificare esplicitamente la chiave può evitare che il client tenti quella sbagliata.

Come usare la modalità verbose per capire dove si blocca la connessione

Il client OpenSSH può aumentare il livello di logging con -v:

sftp -v [email protected]

Con una porta personalizzata:

sftp -v -P 2222 [email protected]

L’output permette di capire meglio se il problema avviene durante:

  • apertura della connessione;
  • verifica del server;
  • selezione delle chiavi;
  • autenticazione;
  • avvio del sottosistema.

La modalità verbose è particolarmente utile perché evita di trattare qualunque errore come se fosse semplicemente “password sbagliata”.

Quando usare SFTP per WordPress e per la gestione di un server

Con WordPress, SFTP è utile soprattutto quando devi lavorare direttamente sul filesystem e la dashboard non è sufficiente o non è più accessibile.

Può servire, per esempio, per:

  • caricare o scaricare molti file;
  • sostituire file durante una procedura manuale;
  • intervenire su plugin o temi quando wp-admin non funziona;
  • controllare file di configurazione;
  • recuperare log;
  • effettuare una copia locale prima di una modifica.

La documentazione WordPress consiglia di preferire SFTP al normale FTP quando l’hosting lo supporta.

Questo non significa però che devi utilizzarlo per ogni operazione WordPress. Per piccole modifiche può essere sufficiente il file manager del pannello hosting; per aggiornamenti ordinari, WordPress dispone già dei propri meccanismi.

L’accesso remoto diventa particolarmente utile quando hai bisogno di lavorare sui file indipendentemente dall’applicazione WordPress.

Se invece gestisci direttamente un VPS o un server Linux, il protocollo si integra naturalmente con l’accesso SSH già utilizzato per l’amministrazione della macchina.

Conclusione

SFTP è la scelta naturale quando devi trasferire o gestire file attraverso l’infrastruttura SSH e il server mette questo servizio a disposizione.

La porta normalmente utilizzata è la 22, ma devi sempre rispettare la configurazione effettiva del server. Per collegarti da terminale bastano spesso sftp utente@host, -P per una porta personalizzata e -i quando devi indicare una chiave specifica.

Una volta dentro, la distinzione più importante da ricordare è semplice: get scarica dal server, put carica sul server. Da questi due comandi puoi arrivare a trasferimenti multipli, directory ricorsive, ripresa dei trasferimenti e gestione dei file remoti.

Il protocollo, però, non va confuso con FTPS e non rende automaticamente sicura qualsiasi configurazione. La protezione del trasporto funziona insieme a host key, autenticazione, gestione corretta delle chiavi e permessi del filesystem.

Se devi lavorare sui file di un sito e il provider offre SFTP, usalo al posto del normale FTP non cifrato. Se invece il server supporta un protocollo differente, configura il client sulla base dei parametri reali del servizio anziché cambiare porte e opzioni per tentativi.