Introduzione
FTP, il File Transfer Protocol, era un metodo popolare e non crittografato per il trasferimento di file tra due sistemi remoti. A partire dal 2022, è stato deprecato dalla maggior parte del software moderno a causa della mancanza di sicurezza e può essere utilizzato principalmente solo in applicazioni legacy.
SFTP, che sta per Secure File Transfer Protocol, è un protocollo separato integrato in SSH che può implementare comandi FTP su una connessione sicura. Tipicamente, può fungere da sostituto immediato in qualsiasi contesto in cui sia ancora necessario un server FTP.
Nella maggior parte dei casi, SFTP è preferibile a FTP a causa delle sue caratteristiche di sicurezza sottostanti e della capacità di sfruttare una connessione SSH. FTP è un protocollo non sicuro che dovrebbe essere utilizzato solo in casi limitati o su reti di fiducia.
Anche se SFTP è integrato in molti strumenti grafici, questa guida mostrerà come utilizzarlo attraverso la sua interfaccia a riga di comando interattiva.
Come Connettersi con SFTP
Per impostazione predefinita, SFTP utilizza il protocollo SSH per autenticare e stabilire una connessione sicura. A causa di ciò, sono disponibili gli stessi metodi di autenticazione presenti in SSH.
Sebbene tu possa autenticarti con le password di default, ti consigliamo di creare chiavi SSH e trasferire la tua chiave pubblica su qualsiasi sistema a cui devi accedere. Questo è molto più sicuro e può risparmiarti tempo nel lungo periodo.
Consulta questa guida per configurare le chiavi SSH per accedere al tuo server se non lo hai già fatto.
Se riesci a connetterti alla macchina usando SSH, allora hai completato tutti i requisiti necessari per utilizzare SFTP per gestire i file. Testa l’accesso SSH con il seguente comando:
Se funziona, esci digitando:
Ora possiamo stabilire una sessione SFTP emettendo il seguente comando:
Ti connetterai al sistema remoto e il tuo prompt cambierà in un prompt SFTP.
Se stai lavorando su una porta SSH personalizzata (non la porta predefinita 22), puoi aprire una sessione SFTP come segue:
Questo ti connetterà al sistema remoto tramite la porta specificata.
Ottieni Aiuto in SFTP
Il comando più utile da imparare prima di tutto è il comando di aiuto. Questo ti dà accesso a un riassunto degli altri comandi SFTP. Puoi chiamarlo digitando uno di questi comandi nel prompt:
o
Questo mostrerà un elenco dei comandi disponibili:
OutputAvailable commands:
bye Quit sftp
cd path Change remote directory to 'path'
chgrp grp path Change group of file 'path' to 'grp'
chmod mode path Change permissions of file 'path' to 'mode'
chown own path Change owner of file 'path' to 'own'
df [-hi] [path] Display statistics for current directory or
filesystem containing 'path'
exit Quit sftp
get [-Ppr] remote [local] Download file
help Display this help text
lcd path Change local directory to 'path'
. . .
Esploreremo alcuni dei comandi che vedrai nelle seguenti sezioni.
Navigazione con SFTP
Possiamo navigare attraverso la gerarchia dei file del sistema remoto usando una serie di comandi che funzionano in modo simile ai loro corrispettivi nella shell.
Per prima cosa, orientiamoci scoprendo in quale directory ci troviamo attualmente nel sistema remoto. Proprio come in una sessione di shell tipica, possiamo digitare quanto segue per ottenere la directory corrente:
OutputRemote working directory: /home/demouser
Possiamo visualizzare i contenuti della directory corrente del sistema remoto con un altro comando familiare:
OutputSummary.txt info.html temp.txt testDirectory
Nota che i comandi disponibili nell’interfaccia SFTP non corrispondono esattamente alla sintassi tipica della shell e non sono altrettanto ricchi di funzionalità. Tuttavia, implementano alcune delle opzioni più importanti, come l’aggiunta di -la
a ls
per visualizzare più metadati e permessi dei file:
Outputdrwxr-xr-x 5 demouser demouser 4096 Aug 13 15:11 .
drwxr-xr-x 3 root root 4096 Aug 13 15:02 ..
-rw------- 1 demouser demouser 5 Aug 13 15:04 .bash_history
-rw-r--r-- 1 demouser demouser 220 Aug 13 15:02 .bash_logout
-rw-r--r-- 1 demouser demouser 3486 Aug 13 15:02 .bashrc
drwx------ 2 demouser demouser 4096 Aug 13 15:04 .cache
-rw-r--r-- 1 demouser demouser 675 Aug 13 15:02 .profile
. . .
Per accedere a un’altra directory, possiamo emettere questo comando:
Ora possiamo attraversare il sistema di file remoto, ma cosa succede se dobbiamo accedere al nostro sistema di file locale? Possiamo dirigere i comandi verso il sistema di file locale precedendoli con una l
per locale.
Tutti i comandi discussi finora hanno equivalenti locali. Possiamo stampare la directory di lavoro locale:
OutputLocal working directory: /Users/demouser
Possiamo elencare i contenuti della directory corrente sulla macchina locale:
OutputDesktop local.txt test.html
Documents analysis.rtf zebra.html
Possiamo anche cambiare la directory con cui vogliamo interagire sul sistema locale:
Trasferimento di file con SFTP
Se vogliamo scaricare file dal nostro host remoto, possiamo farlo usando il comando get
:
OutputFetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01
Come puoi vedere, per impostazione predefinita, il comando get
scarica un file remoto in un file con lo stesso nome sul sistema file locale.
Possiamo copiare il file remoto con un nome diverso specificando il nome successivamente:
Il comando get
accetta anche alcune opzioni. Ad esempio, possiamo copiare una directory e tutti i suoi contenuti specificando l’opzione ricorsiva:
Possiamo dire a SFTP di mantenere le autorizzazioni e gli orari di accesso appropriati usando il flag -P
o -p
:
Trasferimento di file locali al sistema remoto
Il trasferimento di file al sistema remoto funziona allo stesso modo, ma con un comando put
:
OutputUploading localFile to /home/demouser/localFile
localFile 100% 7607 7.4KB/s 00:00
Le stesse opzioni che funzionano con get
si applicano a put
. Quindi per copiare un’intera directory locale, è possibile eseguire put -r
:
Uno strumento familiare utile durante il download e l’upload di file è il comando df
, che funziona in modo simile alla versione della riga di comando. Utilizzando questo, puoi verificare di avere abbastanza spazio per completare i trasferimenti che ti interessano:
Output Size Used Avail (root) %Capacity
19.9GB 1016MB 17.9GB 18.9GB 4%
Si noti che non esiste una variazione locale di questo comando, ma possiamo aggirare questo problema emettendo il comando !
.
Il comando !
ci porta in una shell locale, dove possiamo eseguire qualsiasi comando disponibile sul nostro sistema locale. Possiamo controllare l’utilizzo del disco digitando:
e poi
OutputFilesystem Size Used Avail Capacity Mounted on
/dev/disk0s2 595Gi 52Gi 544Gi 9% /
devfs 181Ki 181Ki 0Bi 100% /dev
map -hosts 0Bi 0Bi 0Bi 100% /net
map auto_home 0Bi 0Bi 0Bi 100% /home
Qualsiasi altro comando locale funzionerà come previsto. Per tornare alla sessione SFTP, digita:
Dovresti ora vedere il prompt SFTP tornare.
Manipolazioni di file semplici con SFTP
SFTP ti consente di eseguire alcuni tipi di manutenzione del filesystem. Ad esempio, puoi cambiare il proprietario di un file sul sistema remoto con:
Si noti come, a differenza del comando di sistema chmod
, il comando SFTP non accetta nomi utente, ma utilizza invece gli UID. Sfortunatamente, non esiste un modo integrato per conoscere l’UID appropriato dall’interfaccia SFTP.
Come soluzione alternativa, è possibile leggere dal file /etc/passwd
, che associa i nomi utente agli UID nella maggior parte degli ambienti Linux:
Outputroot:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
. . .
Nota come invece di dare il comando !
da solo, lo abbiamo usato come prefisso per un comando shell locale. Questo funziona per eseguire qualsiasi comando disponibile sulla nostra macchina locale e avrebbe potuto essere usato con il comando locale df
precedentemente.
L’UID sarà nella terza colonna del file, come delimitato dai caratteri dei due punti.
Allo stesso modo, possiamo cambiare il proprietario del gruppo di un file con:
Di nuovo, non c’è un modo integrato per ottenere un elenco dei gruppi del sistema remoto. Possiamo aggirare il problema con il seguente comando:
Outputroot:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .
La terza colonna contiene l’ID del gruppo associato al nome nella prima colonna. Questo è ciò che stiamo cercando.
Il comando SFTP chmod
funziona normalmente sul filesystem remoto:
OutputChanging mode on /home/demouser/publicFile
Non c’è un comando equivalente per manipolare i permessi dei file locali, ma è possibile impostare il umask locale, in modo che tutti i file copiati sul sistema locale abbiano i loro permessi corrispondenti.
Questo può essere fatto con il comando lumask
:
OutputLocal umask: 022
Ora tutti i file regolari scaricati (a condizione che non venga utilizzata l’opzione -p
) avranno i permessi 644.
SFTP consente anche di creare directory sia nei sistemi locali che remoti con lmkdir
e mkdir
rispettivamente.
Il resto dei comandi sui file si riferisce solo al filesystem remoto:
Questi comandi replicano il comportamento principale dei loro equivalenti shell. Se devi eseguire queste azioni sul filesystem locale, ricorda che puoi passare a una shell emettendo questo comando:
O eseguire un singolo comando sul sistema locale anteponendo il comando con !
così:
Quando hai finito la sessione SFTP, usa exit
o bye
per chiudere la connessione.
Conclusione
Sebbene la sintassi SFTP sia molto meno esaustiva rispetto agli strumenti moderni della shell, può essere utile per garantire la compatibilità con la sintassi FTP legacy o per limitare attentamente le funzionalità disponibili agli utenti remoti di alcuni ambienti.
Ad esempio, puoi utilizzare SFTP per abilitare determinati utenti al trasferimento di file senza accesso SSH. Per ulteriori informazioni su questo processo, consulta il nostro tutorial su Come Abilitare SFTP Senza Accesso alla Shell.
Se sei abituato a utilizzare FTP o SCP per effettuare i tuoi trasferimenti, SFTP è un buon modo per sfruttare i punti di forza di entrambi. Anche se non è appropriato per ogni situazione, è uno strumento flessibile da avere nel tuo repertorio.