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 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 SFTP/SCP, esempi: download upload file via SSH linea comando (Linux 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 SFTP/SCP, esempi: download upload file via SSH linea comando (Linux 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 SFTP/SCP, esempi: download upload file via SSH linea comando (Linux 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 SFTP/SCP, esempi: download upload file via SSH linea comando (Linux 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 SFTP/SCP, esempi: download upload file via SSH linea comando (Linux 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 SFTP/SCP, esempi: download upload file via SSH linea comando (Linux 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 SFTP/SCP, esempi: download upload file via SSH linea comando (Linux Ubuntu/CentOS) - Schermata del 2017-09-26 10-03-52

Salvare la password di SCP?

Non esiste alcun modo per "salvare" la password usata da scp per evitare di 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.

Scaricare una cartella via SCP

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 SFTP/SCP, esempi: download upload file via SSH linea comando (Linux Ubuntu/CentOS) - Schermata del 2017-09-26 10-17-32

Caricare (upload) file via SSH da linea di comando con SCP

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"