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
In questo articolo vedremo come caricare e scaricare file via SSH con Linux. Per la trattazione analoga da PC Windows:
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
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
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
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
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
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)
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:
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"
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"