MegaLab.it
Stampa Articolo
Aperiodico gratuito di informatica
 
Connessione, connesso, PC, mondo, earth, ADSL, network, LAN

Trasferire file in modo sicuro con SSH

a cura di Zane
19/01/2009 - articolo
Tecniche Avanzate - Vediamo come scambiare file con un server remoto al riparo da occhi indiscreti, compresi quelli di amministratori di sistema troppo curiosi. La tecnica diviene particolarmente utile anche in caso fosse impiegata una rete wireless non protetta.

In una guida precedente ho illustrato "Come predisporre un server SSH in Windows". Nel presente articolo, iniziamo a vedere uno dei tanti usi che è possibile fare del server remoto.

In particolare, mostrerò due approcci diversi (uno grafico e uno da linea di comando) per scambiare file in modo completamente sicuro, anche in caso il client fosse collegato attraverso una rete wireless non protetta.

Lo scenario

Immaginate la seguente situazione: vi trovate a casa di un amico per lavorare insieme sul progetto che portate avanti da mesi (ad esempio, un sito web su commissione oppure una ricerca per l'università).

Ad un certo punto, ricordate di aver dimenticato sul computer di casa un file indispensabile. Niente paura: se avevate opportunamente prdisposto il vostro server SSH sul PC remoto, potete sfruttare la connessione ad Internet senza fili presente a casa del vostro collega per recuperare il documento in pochi istanti.

Client, _Wireless, _Cloud, _PC.jpg

Perché SSH? Non basta usare FTP o un server web?

Se siete "smanettoni", ci sono buone possibilità che abbiate già installato un server FTP oppure un server HTTP sul vostro PC remoto.

Il problema di queste soluzioni è che tutto il traffico viaggia "in chiaro", ovvero senza cifratura. In caso la connessione messa a disposizione dal vostro amico non fosse debitamente protetta, un vicino troppo curioso (o il gruppo rivale!) potrebbe improvvisarsi "cracker", ed intercettare con facilità sia i documenti in transito, sia l'eventuale password usata per accedere al server remoto, con conseguenze facilmente immaginabili sulla vostra privacy.

Sfruttando SSH avrete a disposizione invece un canale completamente sicuro: anche in caso l'aggressore riuscisse ad intercettare il traffico scambiato con il vostro server, otterrà solamente un flusso di dati senza senso, matematicamente impossibile da decifrare.

Al sicuro, anche dall'amministratore spione

Da notare che scambiare dati via SSH può essere interessante anche in caso si voglia trasferire dati con il proprio PC di casa sfruttando la rete aziendale, ma si tema che l'amministratore di sistema possa monitorare il traffico: utilizzando il metodo qui proposto, nemmeno il dipartimento IT sarà in grado di rintracciare i dati trasferiti.

Attenzione, però. Sebbene i dati stessi non possano essere decifrati, l'amministratore potrebbe facilmente rilevare l'avvenuta trasmissione, e potreste dover fornire una risposta alla domanda "Ho visto che hai effettuato traffico crittografato. Non so cosa ci fosse dentro, ma ho rilevato che hai trasferito 100 MB di dati: che cosa hai scaricato? "

Usare WinSCP

WinSCP è un comodo programma, da installare sul client, che consente di scambiare file sfruttando appunto un server SSH con il semplice "clicca e trascina"

Winscp_connected.jpg

L'installatore è disponibile partendo da qui (la pagina per il download è in inglese, mentre il programma parla anche italiano). In alternativa, segnalo anche la comoda versione portable, che consente di salvare tutte le impostazioni nella cartella del programma, invece che nel registro di sistema, permettendo così di muovere agevolmente l'applicazione fra PC differenti.

Una volta installato ed avviato il programma, sarà necessario compilare la schermata con le solite informazioni di accesso al server:

Winscp_connection_data.jpg

Notate l'utile opzione del ramo Ambiente -> Cartelle, mediante la quale specificare la posizione predefinita in cui spostarsi a seguito del collegamento: personalmente, scelgo sempre di iniziare la sessione posizionato sul desktop del client locale, e sul disco E: del server remoto. Ricordate solamente che il server remoto sta funzionando con un emulatore UNIX, e quindi dovrete anteporre /cygdrive/ alla lettera relativa all'unità cui vorrete accedere.

Per esempio, se la cartella remota fosse stata c:\Documenti\Università\Tesi\Progetto avrei dovuto inserire /cygdrive/c/Documenti/Università/Tesi/Progetto

Winscp_start_in.jpg

In caso, potete cliccare ora su Salva.. per memorizzare i dati necessari al collegamento e non doverli così ri-immettere la prossima volta.

Ora, sarà sufficiente cliccare su Accedi: trattandosi della prima connessione verso tale host, verrà mostrata la consueta schermata di conferma, a cui rispondere il solito Si.

Se tutto sarà stato configurato in modo opportuno, sarà possibile visualizzare i file del PC locale sulla sinistra, e quelli del PC remoto sulla destra

Winscp_connected.jpg

L'interfaccia è davvero sovrabbondante di funzionalità! Ad ogni modo, focalizzate l'attenzione sui menu a discesa per selezionare i percorsi, e la piccola barra di navigazione Avanti, Indietro, Su, Cartella iniziale, che consentono di spostarsi agevolmente fra le cartelle ed individuare i documenti di interesse

Winscp_navigazione.jpg

Per trasferire un documento o una cartella da (oppure verso) uno dei due dischi remoti, è sufficiente selezionare e trascinare gli oggetti fra le due colonne, e quindi confermare la volontà di procedere con il trasferimento (potete anche spuntare Non visualizzare ancora questa finestra, se vi sentite abbastanza coraggiosi).

L'operazione di copia richiederà un tempo variabile, influenzato dalla dimensione dei file che si desidera trasferire e dalla velocità del collegamento in uso.

Scambiare file da riga di comando

Se avete installato anche sul vostro client l'ambiente Cygwin, potete sfruttare ora il comando SCP anche per trasferire file da linea di comando.

Per trasferire una cartella dal server remoto al client locale, aprite una finestra di prompt e provate ad adattare il seguente comando alle vostre necessità:

scp -r Zane@srv-rettore:/cygdrive/e/Appunti /cygdrive/d/Desktop/

Sostitute Zane con il nome dell'utente cui avete consentito l'accesso al server

Sostituite srv-rettore con l'indirizzo del PC remoto su cui è in esecuzione il server SSH

Sostituite a /cygdrive/e/Appunti il percorso del file o della cartella che volete trasferire

Sostituire a /cygdrive/d/Desktop/ il percorso locale in cui volete sia copiato il documento o la cartella indicata

Fate la massima attenzione a non cancellare la chiocciola fra il nome utente e l'indirizzo del server, conservare i due punti fra l'indirizzo del server ed il percorso remoto.

Altro punto critico è la correttezza i percorsi, che dovranno essere indicati utilizzando come partenza la cartella /cygdrive/: come indicato in precedenza, /cygdrive/ seguito dalla lettera di una unità a disco è il modo con cui l'ambiente di emulazione Cygwin gestisce il file system. Quindi, per accedere a c:\Documenti\Università\Tesi\Progetto su uno dei due calcolatori, sarà necessario utilizzare la dicitura /cygdrive/c/Documenti/Università/Tesi/Progetto.

Attenzione anche a rispettare la differenza fra lettere maiuscole e minuscole nei nomi dei file!

Notate infine che non vi sono spazi nei percorsi o nomi dei file: in caso ve ne fossero, sarebbe necessario racchiudere i percorsi fra doppio apice (") ed anteporre una barra (\) prima di ogni spazio. Insomma, una complicazione in più, che sconsiglio vivamente.

Una volta impartito l'ordine, verrà richiesta la password per l'accesso al sistema remoto, ed inizierà quindi il trasferimento. Ultimata l'operazione, avremo copiato il file dal server remoto al client locale: complimenti!

Ma... come fare l'operazione inversa, ovvero caricare un file locale sul server remoto? È sufficiente invertire i percorsi. Per caricare il file pippo.zip ad esempio, userò il seguente comando

scp /cygdrive/e/Documenti/pippo.zip Zane@srv-rettore:/cygdrive/e/Documenti/pippo.zip

A cui si applicano, chiaramente, le osservazioni già espresse in precedenza. Notate solo che in questo caso si tratta di trasferire un file, e non una directory: ho quindi rimosso l'opzione -r (copia ricorsiva) dal comando.

Scripting? Si, grazie!

Utilizzare la mera linea di comando per eseguire qualche semplice e sporadica operazione di trasferimento file è chiaramente cosa ben poco pratica, sopratutto considerando la disponibilità di programmi ad interfaccia grafica così ben realizzati come il già citato WinSCP.

L'uso della linea di comando è però ineguagliabile quando si tratta di automatizzare le procedure, realizzando piccoli script in grado di portare a termine compiti ripetitivi e tediosi con un semplice doppio click.

Immaginate di voler trasferire, ogni mattina, il backup del vostro sito web dal server (raggiungibile all'indirizzo miosito.it) al sistema locale. Considerate inoltre che si tratti sempre degli stessi tre file, denominati backup_database_sito.zip, backup_database_forum.zip e backup_file.zip, generati da un automatismo in esecuzione sul server stesso. Non sarebbe fantastico se fosse sufficiente fare doppio click su un'icona sul desktop perché il PC locale si colleghi al server remoto ed inizi a scaricare tali file?

L'esempio Scarica Backup (autenticazione tramite password).bat nell'archivio in allegato può essere personalizzato per consentire proprio questa operazione: fate riferimento alla spiegazione fornita in precedenza per capire come adattare le varie linee di comando alle vostre specifiche esigenze.

Winscp_download_backup_password.jpg

Da notare però che, prima di iniziare a scaricare ogni file, il sistema richiederà l'immissione della password. Per motivi di sicurezza, SSH non consente infatti di specificarla da linea di comando, ma solamente in modo interattivo.

L'autenticazione tramite chiave RSA rende facoltativa la password

Per superare questa limitazione e rendere davvero automatico il procedimento, è necessario implementare l'autenticazione mediante chiave asimmetrica: per farlo, seguite la procedura per la generazione e lo scambio delle chiavi illustrate nella guida "Autenticazione mediante chiave asimmetrica su server SSH".

Una volta terminata la procedura, potrete personalizzare ed utilizzare l'altro file di esempio, Scarica Backup (autenticazione tramite chiave RSA).bat: come vedete, i comandi di trasferimento sono molto simili. L'unica differenza è l'impiego del parametro -i /cygdrive/c/chiavi_rsa/chiave_server_1 che trasmette appunto al server la chiave privata necessaria per l'identificazione.

Una volta personalizzato tale batch con i parametri del vostro server, potrete scaricare il backup del sito con un semplice doppio click sul file.

Automatizzare ulteriormente, con Operazioni Pianificate

Possiamo ulteriormente perfezionare la procedura, facendo in modo che sia il sistema operativo in automatico, e non l'utente, ad avviare ogni mattina il file batch incaricato di scaricare le copie di backup: si tratta semplicemente di aggiungere il file Scarica Backup (autenticazione tramite chiave RSA).bat ad Operazioni Pianificate, così come spiegato nell'articolo "Automatizzare azioni ripetitive con Operazioni Pianificate".

MegaLab.it rispetta la tua privacy. Per esercitare i tuoi diritti scrivi a: privacy@megalab.it .

Copyright 2008 MegaLab.it - Tutti i diritti sono riservati