Sono un utente abbastanza atipico quando si parla di sistemi operativi. Preferisco nettamente Windows su PC e notebook, ma è Linux (CentOS/Ubuntu) la mia prima scelta quando si parla di server. In questa situazione, trasferire file via SSH tramite SCP/SFTP non è semplice quanto sarebbe fra due sistemi Linux. Fortunatamente, basta conoscere gli strumenti giusti per ottenere un flusso di lavoro ottimale. Vediamo dunque come caricare e scaricare file via SSH (SCP/SFTP) fra Windows e Linux, sia da interfaccia grafica, sia da linea di comando

Articolo aggiornato per rispecchiare la disponibilità nativa del comando scp in Windows 10.

Guida: upload download via SSH (SFTP/SCP) Windows Linux, linea comando interfaccia grafica - pscp winscp spotlight

In questo articolo vedremo come svolgere upload e download via SSH, tramite i protocolli SCP/SFTP, fra server Linux remoto e PC Windows locale. Per la trattazione analoga incentrata sullo scambio file da Linux a Linux:

» Leggi: Guida SFTP/SCP, con esempi: download e upload file via SSH da linea di comando (Linux Ubuntu/CentOS)

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. Per connettersi via SSH da un PC Windows ad un server Linux si impiega un apposito client, il più famoso dei quali è chiamato PuTTY

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

Guida: upload download via SSH (SFTP/SCP) Windows Linux, linea comando interfaccia grafica - putty session ssh

SSH serve, appunto, per impartire comandi ad un sistema Linux remoto, ma non è in grado di gestire lo scambio 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 con Windows: La Grande Guida a FileZilla Server

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: upload download via SSH (SFTP/SCP) Windows Linux, linea comando interfaccia grafica - 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: upload download via SSH (SFTP/SCP) Windows Linux, linea comando interfaccia grafica - Mobile_zShot_1505740580

Download e upload di file via SSH, con interfaccia grafica: SCP con WinSCP

In caso il server Linux con il quale desiderate scambiare file sia configurato in modo da non consentire l'accesso SFTP, ma soltanto SCP, allora FileZilla non è compatibile. Quello che ci vuole è un altro client open source chiamato WinSCP:

» Download: WinSCP (portable)

» Download: WinSCP

Ancora una volta, l'interfaccia è estremamente simile -ed il funzionamento generale analogo- a quanto visto per FileZilla. Ricordate di specificare SCP come protocollo, e di fornire credenziali SSH valide

Guida: upload download via SSH (SFTP/SCP) Windows Linux, linea comando interfaccia grafica - Mobile_zShot_1505741984

Da notare che WinSCP supporta anche SFTP e persino il protocollo FTP classico. Potete dunque valutare di utilizzare WinSCP come sostituto di FileZilla e mantenerne installato solo uno.

SCP/SFTP per Windows 10, da linea di comando

A partire da Windows 10 1709 (Fall Creators Update), Windows include nativamente un client SSH da linea di comando e, con esso, i comandi sftp o scp.

Guida: upload download via SSH (SFTP/SCP) Windows Linux, linea comando interfaccia grafica

Di conseguenza, possiamo ora lavorare quasi come se dovessimo svolgere un trasferimento file da Linux a Linux:

» Leggi: PC e server Linux (Ubuntu/CentOS): guida rapida a download e upload via SFTP/SCP (SSH) da linea di comando

Come unica accortezza ricordate di utilizzare i percorsi Windows per indicare il file locale. Ecco dunque che scriveremo:

  • download file via SCP (SSH): scp root@mioserver.com:"/cartella1/cartella2/file_da_scaricare.txt" "C:\mia_cartella\mio_file.txt"
  • upload file via SCP (SSH): scp "C:\mia_cartella\mio_file.txt" root@mioserver.com:"/cartella1/cartella2"

Per maggiori informazioni rimando nuovamente alla guida specifica.

SCP per Windows 10, da linea di comando: PuTTY Secure Copy client (pscp.exe)

Se il PC impiega Windows 8 o qualsiasi altra generazione precedente a Windows 10 1709, il comando scp non è disponibile nativamente. In tal caso, dobbiamo ripiegare su PuTTY Secure Copy client (pscp.exe)

» Download: PuTTY Secure Copy client (pscp.exe)

Guida: upload download via SSH (SFTP/SCP) Windows Linux, linea comando interfaccia grafica - Mobile_zShot_1505744790

Dopo averlo scaricato in una cartella a piacere, apriamo il Prompt dei comandi, quindi impartiamo cd per spostiamoci nella cartella nella quale abbiamo salvato l'eseguibile. Se, ad esempio, abbiamo salvato il file nella cartella Download (predefinita), usiamo:

cd "%USERPROFILE%\Downloads"

Scaricare (download) file via SSH da linea di comando con pscp.exe

Per scaricare un file da linea di comando con pscp.exe lanceremo qualcosa di simile a:

pscp.exe -pw miaPassword root@mioserver.com:"/cartella1/cartella2/file_da_scaricare.txt" "%USERPROFILE%\Downloads"

Dove:

  • pscp.exe: è il nome dell'eseguibile
  • -pw miaPassword: password associata all'account SSH da usare per l'autenticazione sul sistema remoto (vedi seguito per alternativa)
  • 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 server) del file che desideriamo scaricare
  • "%USERPROFILE%\Downloads": percorso locale nel quale salvare il file scaricato

Ricordate che tutte le opzioni (come -pw miaPassword) devono obbligatoriamente apparire nel comando prima della coppia "origine destinazione", altrimenti otterrete l'errore More than one remote source not supported.

Guida: upload download via SSH (SFTP/SCP) Windows Linux, linea comando interfaccia grafica

Alla primissima esecuzione riceverete un avviso del tipo The server's host key is not cached in the registry: digitate y per proseguire.

Autenticazione tramite chiave con PSCP

Se il server è configurato in modo da richiede l'uso delle chiavi, e non di una password, dobbiamo rimuovere -pw miaPassword ed indicare al suo posto il percorso del file che contiene la nostra chiave tramite l'argomento -i. Il comando precedente diventa quindi:

pscp.exe -i "%USERPROFILE%\Chiavi SSH\id_rsa.ppk" root@mioserver.com:"/cartella1/cartella2/file_da_scaricare.txt" "%USERPROFILE%\Downloads"

Da notare che la chiave deve essere quella privata, e deve essere stata preventivamente convertita in "formato PuTTY" (.ppk). Per maggiori info:

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

Scaricare una cartella con PSCP

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

pscp.exe -pw miaPassword -r root@mioserver.com:"/cartella1/cartella2/cartella_da_scaricare" "%USERPROFILE%\Downloads"

Guida: upload download via SSH (SFTP/SCP) Windows Linux, linea comando interfaccia grafica

Di nuovo: ricordate che anche il -r deve stare prima della coppia "sorgente destinazione".

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

La sintassi per eseguire l'upload da linea di comando con pscp.exe è 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:

pscp.exe -pw miaPassword "%USERPROFILE%\Downloads\file_da_caricare" root@mioserver.com:"/cartella1/cartella2"

Per caricare un'intera cartella:

pscp.exe -pw miaPassword -r "%USERPROFILE%\Downloads\cartella_da_caricare" root@mioserver.com:"/cartella1/cartella2/"