Skip to content
Home » Servizio Calcolo » Trasferimento file con scp e port forwarding

Trasferimento file con scp e port forwarding

Per migliorare la sicurezza dei nostri sistemi informatici è stato bloccato l’accesso diretto dall’esterno via ssh ed scp verso le macchine della nostra rete. L’unico accesso consentito è quello verso la macchina gate.pd.infn.it, da questa è poi possibile connettersi alle altre macchine della nostra rete locale.
E’ possibile scambiare file fra la rete interna ed esterna con trasferimento dei file con scp e port forwarding.
Per effettuare una sessione interattiva su un computer della nostra rete, connettersi a gate con ssh e poi da lì effettuare una nuova connessione con ssh verso la macchina desiderata. Se è necessario scambiare files tra una macchina interna alla rete ed una esterna, risulta abbastanza scomodo fare una copia temporanea su gate. Esistono però due possibilità per effettuare una copia diretta dei files.

Copia dei file usando il comando scp dalla macchina interna

Questa opzione è utilizzabile solo se sul computer esterno è attivo un server ssh (tipicamente deve essere una macchina unix o linux) e se gli amministratori della rete su cui si trova tale macchina consentono la connessione ad essa tramite ssh/scp.
Per fare questo tentativo basta collegarsi a gate.pd.infn.it e poi alla macchina interna e da lì provare a usare il comando scp per trasferire i files. Se funziona, questo è il metodo più semplice.

Copia dei file con la tecnica del port forwarding di ssh

Questo metodo consiste nell’usare una opzione di ssh che consente di redirigere una porta del computer esterno verso il computer interno col quale si vogliono scambiare files, passando però attraverso gate.
La procedura da seguire è questa:

Creazione del tunnel

Se il computer esterno ha un sistema unix/linux, allora da una finestra terminale si dà il comando:

ssh -L port:host.pd.infn.it:22 user@gate.pd.infn.it

dove port è un numero scelto a piacere purché compreso tra 1025 e 65535, host è il computer interno con il quale si vogliono scambiare i files e user è il nome dell’account di gate che si vuole utilizzare.
Con questo comando si redireziona la porta locale port verso la porta 22 (ssh) di host.pd.infn.it. Può capitare che la porta locale sia già utilizzata da altre applicazioni e di conseguenza si ottenga un messaggio di errore tipo “port already in use”: in tal caso basta provare con un’altra porta.

Se il computer esterno ha un sistema windows

Creating a SSH tunnel using mobaXterm MobaXterm on Windows

Se è installato win32ssh: si attiva il programma e poi si va in:
Edit -> Settings -> Profile Settings -> tunneling 
e si aggiunge un “Outgoing tunnel” cliccando su “Add”.
Va specificata la listen port locale (il numero tra 1025 e 65535), l’host di pd.infn.it col quale si vogliono scambiare files e la destination port (che deve essere 22).
Poi si apre una connessione terminale con gate per attivare il tunnel.

copia dei file

A questo punto è possibile scambiare i files direttamente tra il computer esterno e quello interno alla nostra rete usando un client scp sul computer esterno con l’avvertenza di collegarsi a localhost sulla porta prescelta e non direttamente al computer interno (N.B.: bisogna usare letteralmente la parola “localhost“).
Se il computer esterno ha un sistema unix/linux, allora da un’altra finestra terminale (sul proprio PC non da gate) si dà il comando:

scp -P port -oNoHostAuthenticationForLocalhost=yes user@localhost:path1 path2

oppure:

scp -P port -oNoHostAuthenticationForLocalhost=yes path1 user@localhost:path2

a seconda che si voglia effettuare un trasferimento dal computer interno a quello esterno o viceversa.

port è la porta scelta in precedenza, user è il nome dell’account sul computer interno, path1 è il percorso del file da copiare e path2 è quello di destinazione. L’opzione NoHostAuthenticationForLocalhost serve per evitare di salvare la chiave dell’host interno col nome di localhost.

Se il computer esterno ha un sistema windows, si lancia il programma “SSH Secure File Transfer Client” e ci si connette a localhost specificando lo user del computer interno a cui ci si vuol connettere e la portscelta in precedenza.
Alla domanda se salvare la chiave dell’host nel database locale conviene rispondere “NO” per quanto spiegato prima.
A questo punto si è collegati al computer interno e si possono scambiare files tramite l’interfaccia grafica.