Introduzione

SFTP (SSH File Transfer Protocol) è un protocollo di file sicuro utilizzato per accedere, gestire e trasferire file su un trasporto SSH crittografato.

Rispetto al protocollo FTP tradizionale, SFTP offre tutte le funzionalità di FTP ed è più facile da configurare.

A differenza di scp command, che consente solo i trasferimenti di file, il comando sftp consente di eseguire una serie di operazioni su file remoti e riprendere i trasferimenti di file.

In questo tutorial, ti mostreremo come usare il comando sftp Linux.

Prerequisiti

Per poter trasferire e gestire i file tramite SFTP è necessario disporre dell'autorizzazione di scrittura sul sistema remoto.

Quando si trasferiscono file di grandi dimensioni, si consiglia di eseguire il comando sftp all'interno di una sessione di screen o di  tmux.

La directory da cui si esegue il comando sftp è la directory di lavoro locale.

Stabilire una connessione SFTP

SFTP funziona su un modello client-server. È un sottosistema di SSH e supporta tutti i meccanismi di autenticazione SSH.

Sebbene l'autenticazione con password tradizionale sia impostata per impostazione predefinita e più facile da usare, se ti connetti regolarmente al tuo server tramite SSH/SFTP, si consiglia di creare chiavi SSH e impostare un accesso SFTP senza password.

Per aprire una connessione SFTP a un sistema remoto, utilizzare il comando sftp seguito dal nome utente del server remoto e dall'indirizzo IP o dal nome dominio:

sftp [email protected]_ip_or_hostname

Se ti stai connettendo a un host utilizzando l'autenticazione con password ti verrà chiesto di inserire la password dell'utente.

Una volta connesso, ti verrà presentato il prompt sftp e potrai iniziare a interagire con il computer remoto:

Connected to [email protected]_ip_or_hostname.
sftp>

Se il server SSH remoto non è in ascolto sulla porta predefinita 22, utilizzare l'opzione -oPort per specificare la porta alternativa:

sftp -oPort=custom_port [email protected]_ip_or_hostname

Comandi SFTP

La maggior parte dei comandi SFTP sono simili o identici ai comandi che useresti nel prompt della shell Linux.

È possibile ottenere un elenco di tutti i comandi SFTP disponibili digitando help o ?.

help
Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
...
...
version                            Show SFTP version
!command                           Execute 'command' in local shell
!                                  Escape to local shell
?                                  Synonym for help

Quando si è effettuato l'accesso al server remoto, la directory di lavoro corrente è la home directory dell'utente remoto. Puoi verificarlo digitando:

pwd
Remote working directory: /home/remote_username

Per elencare i file e le directory utilizzare il comando ls:

ls

Per passare a un'altra directory, utilizzare il comando cd Ad esempio, per passare alla directory /tmp digitare:

cd /tmp

I comandi precedenti vengono utilizzati per navigare e lavorare sulla posizione remota.

La shell sftp fornisce anche comandi per la navigazione locale, informazioni e gestione dei file. I comandi locali sono preceduti dalla lettera l.

Ad esempio, per stampare la directory di lavoro locale, digitare:

cd lpwd
Local working directory: /home/local_username

Trasferimento di file con SFTP

Con SFTP è possibile trasferire file in modo sicuro tra due macchine.

Se stai lavorando su un computer desktop, puoi utilizzare un client SFTP della GUI come WinSCP o FileZilla per connetterti al server remoto e scaricare o caricare file.

Il comando sftp è utile quando si lavora su un server senza GUI e si desidera trasferire file o eseguire altre operazioni sui file remoti.

Download di file con il comando SFTP

Una volta effettuato l'accesso al server remoto, la directory di lavoro corrente è la home directory dell'utente remoto.

Quando si scaricano file con il comando sftp, i file vengono scaricati nella directory da cui è stato digitato il comando sftp.

Per scaricare un singolo file dal server remoto, utilizzare il comando get:

get filename.zip

L'output dovrebbe assomigliare a questo:

Fetching /home/remote_username/filename.zip to filename.zip
/home/remote_username/filename.zip                           100%   24MB   1.8MB/s   00:13

Se si desidera salvare il file scaricato con un nome diverso, specificare il nuovo nome come secondo argomento:

get filename.zip local_filename.zip

Per scaricare una directory dal sistema remoto, utilizzare l'opzione -r ricorsiva :

get -r remote_directory

Se un trasferimento di file non riesce o viene interrotto, è possibile riprenderlo utilizzando il comando reget.

La sintassi di reget è uguale alla sintassi di get:

reget filename.zip

Caricamento dei file con il comando SFTP

Per caricare un file dal computer locale sul server SFTP remoto, utilizzare il comando put:

put filename.zip

L'output dovrebbe assomigliare a questo:

Uploading filename.zip to /home/remote_username/filename.zip
filename.zip                          100%   12MB   1.7MB/s   00:06

Se il file che si desidera caricare non si trova nella directory di lavoro corrente, utilizzare il percorso assoluto del file.

Quando si lavora con put è possibile utilizzare le stesse opzioni disponibili con il comando get.

Per caricare una directory locale, digitare:

put -r locale_directory

Per riprendere un caricamento interrotto:

reput filename.zip

Manipolazioni di file con SFTP

In genere, per eseguire attività su un server remoto, ci si connette ad esso tramite SSH e si esegue il proprio lavoro utilizzando il terminale shell. Tuttavia, in alcune situazioni, l'utente può avere solo l'accesso SFTP al server remoto.

SFTP consente di eseguire alcuni comandi di base per la manipolazione dei file. Di seguito sono riportati alcuni esempi su come utilizzare la shell SFTP:

Ottieni informazioni sull'utilizzo del disco del sistema remoto :

df
        Size         Used        Avail       (root)    %Capacity
    20616252      1548776     18002580     19067476           7%

Crea una nuova directory sul server remoto:

mkdir directory_name

Rinomina un file sul server remoto:

rename file_name new_file_name

Elimina un file sul server remoto:

rm file_name

Elimina una directory sul server remoto:

rmdir directory_name

Modifica le autorizzazioni di un file sul sistema remoto:

chmod 644 file_name

Cambia il proprietario di un file sul sistema remoto:

chown user_id file_name

È necessario fornire l'ID utente ai comandi chown e chgrp.

Cambia il proprietario del gruppo di un file remoto con:

chgrp group_id file_name

Al termine del lavoro, chiudere la connessione digitando bye o quit.

Conclusione

In questo tutorial, ti abbiamo mostrato come utilizzare il comando sftp per scaricare e caricare file sul tuo server SFTP remoto.