Quando si presenta la necessità di scaricare (download) o caricare (upload) file e cartelle fra PC e server Linux, nessuno strumento risulta sicuro e potete quanto SSH: oltre alla praticità di non dover installare null'altro, possiamo contare sulla forza della crittografia ed esser certi che i dati scambiati fra le due parti non saranno in alcun modo decifrabili, nemmeno in caso un utente ostile intercettasse i pacchetti in transito. Vediamo allora la sintassi per effettuare download/upload da linea di comando tramite SCP (SSH) con Linux

Guida Linux: download upload via SFTP/SCP (SSH) linea comando (Ubuntu/CentOS) - scp ubuntu spotlight

In questo articolo vedremo come caricare e scaricare file via SSH con Linux. Per la trattazione analoga da PC Windows:

» Leggi: Guida: upload e download via SSH (SFTP/SCP) fra Windows e Linux, da linea di comando o interfaccia grafica

Per chi ha fretta

Se già sei esperto di Linux e cerchi solo un "reminder" per la sintassi, eccoti servito:

  • download file via SCP (SSH): scp root@mioserver.com:"/cartella1/cartella2/file_da_scaricare.txt" "$HOME"
  • upload file via SCP (SSH): scp "$HOME/file_da_caricare" root@mioserver.com:"/cartella1/cartella2"

Per trasferire intere cartelle è sufficiente (e necessario!) aggiungere l'argomento -r.

Nel resto dell'articolo approfondiremo questi comandi e spiegheremo il significato dei vari argomenti.

Protocolli SSH, SFTP e SCP

Iniziamo ricordando che Secure Shell (SSH) è un protocollo che consente di accedere ad un PC o server Linux remoto. Una volta stabilita una connessione con SSH ed essersi autenticati con successo, tutti i comandi impartiti nel terminale vengono eseguiti dal sistema remoto, e non da quello locale

Guida Linux: download upload via SFTP/SCP (SSH) linea comando (Ubuntu/CentOS) - ssh ubuntu centos

Ma SSH, nella sua concezione originale, non consente di scambiare file. Allo scopo, intervengono SCP ed SFTP: due strumenti che si appoggiano ad SSH per gestire il login e la crittografia, ma permettono, appunto, download e upload di file da linea di comando.

SCP ed SFTP sono strumenti diversi fra loro ma, poggiando entrambi su SSH, sono generalmente disponibili entrambi. Il primo consente soltanto di caricare/scaricare file in un solo comando, mentre il secondo permette anche di richiedere la lista dei file e cancellarne alcuni da remoto.

Chiudiamo questa breve panoramica ricordando che SFTP non c'entra assolutamente nulla con il protocollo FTP! Quest'ultimo richiede infatti un proprio programma server (distinto da SSH), e non è crittografato. La versione sicura di FTP si chiama FTPS oppure FTPES, con la lettera "S" posta alla fine

» Leggi anche: Configurare un server FTP su Linux CentOS/Ubuntu: Guida rapida a Pure-FTPd

Schematicamente:

  • SFTP: estensione di SSH che consente download ed upload di file
  • FTPS: versione sicura di FTP

Download e upload di file via SSH, con interfaccia grafica: SFTP con FileZilla

FileZilla è un client open source per Windows e Linux che consente di caricare e scaricare file da/verso un sistema remoto. Generalmente, lo si usa con il protocollo FTP, ma è perfettamente in grado di gestire anche lo scambio file via SSH con SFTP

Guida Linux: download upload via SFTP/SCP (SSH) linea comando (Ubuntu/CentOS) - guida filezilla (14)

Durante la configurazione della connessione SFTP con FileZilla, ricordate di selezionare SFTP - SSH File Transfer Protocol come Protocollo e, ovviamente, di immettere username e password di un account SSH presente sul sistema al quale ci stiamo connettendo. Per il resto, la procedura è analoga a quella descritta per l'accesso via FTP in questa guida:

» Leggi: Client FTP (FileZilla), guida rapida - caricare e scaricare file da un server FTP remoto

Guida Linux: download upload via SFTP/SCP (SSH) linea comando (Ubuntu/CentOS) - Mobile_zShot_1505740580

Caricare/scaricare con SSH (SCP) da linea di comando

Per caricare e scaricare file via SSH da linea di comando bisogna usare il comando scp.

» Leggi anche: Come aprire il terminale di Ubuntu

scp è già pre-installato sulla maggior parte delle distribuzioni Linux, ma per esserne sicuri iniziamo lanciando il comando seguente per provare ad installare il pacchetto che lo contiene:

  • Ubuntu: sudo apt-get install openssh-client -y
  • CentOS: sudo yum install openssh-clients -y

Nota: il nome del pacchetto per CentOS termina con la lettera s, quello per Ubuntu no

Guida Linux: download upload via SFTP/SCP (SSH) linea comando (Ubuntu/CentOS) - Schermata del 2017-09-26 09-38-44

Scaricare (download) file via SSH da linea di comando con scp

Per scaricare un file da linea di comando con scp lanceremo qualcosa di simile a:

scp root@mioserver.com:"/cartella1/cartella2/file_da_scaricare.txt" "$HOME"

Dove:

  • scp: è il nome del programma
  • root: username da usare per l'autenticazione sul sistema remoto. È lo stesso utilizzato per l'accesso SSH
  • @: è un carattere "fisso" che separa il nome utente (root, in questo esempio) dall'indirizzo del server
  • mioserver.com: indirizzo del server con il quale scambiare il file
  • :: è un carattere "fisso" che separa l'indirizzo del server (mioserver.com, in questo esempio) dal percorso del file che vogliamo scaricare
  • "/cartella1/cartella2/file_da_scaricare.txt": percorso completo (sul sistema remoto) del file che desideriamo scaricare
  • "$HOME": percorso locale nel quale salvare il file scaricato

Guida Linux: download upload via SFTP/SCP (SSH) linea comando (Ubuntu/CentOS) - Schermata del 2017-09-26 09-55-05

Alla primissima esecuzione riceverete un avviso del tipo The authenticity of host 'mioserver.com' can't be established.: digitate y per proseguire.

Dovrete dunque fornire la password associata al nome utente specificato (root, nel nostro esempio), ricordando sempre che si tratta di un account presente sul sistema remoto, e non di quello locale.

Se l'operazione avviene con successo, il trasferimento del file averà inizio. Dopo qualche tempo (a seconda delle dimensioni e della velocità della linea Internet), ne ritroveremo una copia sul computer locale, nel percorso indicato come ultimo parametro ("$HOME", nell'esempio precedente)

Guida Linux: download upload via SFTP/SCP (SSH) linea comando (Ubuntu/CentOS) - Schermata del 2017-09-26 10-03-52

Da notare che non esiste alcun modo per "salvare" la password per poi non doverla ri-digitare ogni volta. L'unico modo per saltare l'inserimento della password è di effettuare lo scambio chiavi SSH:

» Leggi: Accedere con PuTTY (SSH) senza password a Linux/Ubuntu/CentOS: guida all'autenticazione con chiave asimmetrica (RSA)

Così facendo, il trasferimento avverrà senza bisogno di immettere la password.

Se invece di un singolo file desideriamo trasferire un'intera cartella, dobbiamo specificare anche -r. Ad esempio:

scp -r root@mioserver.com:"/cartella1/cartella2/cartella_da_scaricare" "$HOME"

Guida Linux: download upload via SFTP/SCP (SSH) linea comando (Ubuntu/CentOS) - Schermata del 2017-09-26 10-17-32

Caricare (upload) file via SSH da linea di comando con pscp.exe

La sintassi per eseguire l'upload da linea di comando con scp è esattamente la stessa: basta solo invertire gli argomenti, passando dal percorso_remoto percorso_locale usato fino ad ora al nuovo percorso_locale percorso_remoto.

Per caricare un singolo file:

scp "$HOME/file_da_caricare" root@mioserver.com:"/cartella1/cartella2"

Per caricare un'intera cartella:

scp -r "$HOME/cartella_da_caricare" root@mioserver.com:"/cartella1/cartella2"