Come usare il protocollo ssh in ambiente Linux-MacOSX    (nota per Windows)    


Il protocollo ssh (secure shell) serve per avere comunicazioni "sicure" tra diversi computer via la rete ethernet.
Il pacchetto ssh, più precisamente OpenSSH, è compreso in ogni distribuzione Linux per default.
Per aprire una sessione remota sul server di dipartimento dare il comando

ssh -X  username@didattica1.aquila.infn.it

e poi digitare la password quando richiesta.
In questo comando, username è il vostro nome utente (uid), e la flag -X serve per aprire il canale X11 alle comunicazioni.
Questa apertura vi permetterà di usare gnuplot, o più in generale di chiedere al computer remote (in questo caso didattica1) di aprire un terminale X11 sullo schermo del vostro computer.

Invece per trasferire files da e/o verso il server di dipartimento si hanno due opzioni:

1) si usa il protocollo sftp (secure file transfer protocol):

sftp username@didattica1.aquila.infn.it

digitare la passwd quando richiesto
In questo modo ci si collega su didattica1 ma non in modo grafico. Il prompt all'interno dell'ambiente sftp è ">" (come quello di gnuplot). All'interno di questo ambiente si possono usare una serie di comandi tipo:
- "cd" (change directory) per andare da una directory all'altra ("lcd" per fare la stessa cosa sul computer locale)
- "ls" per vedere il contenuto della directory corrente ("lls" per il computer locale)
- "pwd" per vedere l'indirizzo completo della directory corrente ("lpwd" per lo stesso comando sul computer locale)
- "put" per copiare un file dal computer locale (front-end) al computer remoto
- "get"  per compiare un file dal computer remoto al computer locale
- ................

Come esempio consideriamo il caso in cui voglio copiare il file  "quiquoqua.dat", che si trova all'indirizzo "/var/pippo/pluto/paperino" sul computer locale, all'indirizzo "/home/topolino/paperino/" sul computer remoto. Inoltre voglio copiare dal computer remoto al computer locale il file "paperina.dat".

Ecco la sequenza dei comandi necessari:

1)   cd  /var/pippo/pluto/paperino
2)   sftp username@didattica1.aquila.infn.it
3)   passwd quando richiesta
4)  > cd /home/topolino/paperino
5)  > put quiquoqua.dat
6)  > get paperina.dat
7)  > exit

E' anche possibile usare le cosidette wildcards, ossia se voglio trasferire una serie di files che hanno tutti una parte in comune nel nome (ad esempio tutti i files di tipo .ps) posso usare il seguente comando:  " > put *.ps"

2) si usa il comando scp (secure copy)

scp   /var/pippo/pluto/paperino/quiquoqua.dat    username@didattica1.aquila.infn.it:/home/topolino/paperino/

sarà richiesta la passwd di didattica1 per eseguire la copia. In questo modo non si apre nessuna sessione interattiva su didattica1, se non per il tempo necessario per la copia.
Il comando scp è molto potente perché permette i copiare interi alberi di directories da un computer ad un altro (basta che i computers non abbiano sistemi operativi Windows). Se per esempio voglio copiare il contenuto della cartella "/var/pippo" dal computer locale a quello remoto userò il seguente comando

scp -rp /var/pippo username@didattica1.aquila.infn.it:

notare che in questo comando:
- la flag -r indica che la copia è ricorsiva, ossia discende nelle directories interne alla directory corrente (/var/pippo)
- la flag -p copia i files con le loro carattestiche (data, permessi di accesso etc.)
il contentuo della directory locale /var/pippo verrà copiato nella home directory dell'utente. Se avessi voluto metterlo altrove avrei dovuto specificare l'indirizzo sul computer remoto a partire dalla home directory dell'utente di seguito ai : nel nome dell'host remoto (esempio: "scp -rp /var/pippo username@didattica1:paperino/" in questo modo i file andranno copiati nella directory /home/username/paperino sul computer remoto. Attenzione la directory sull'host remoto deve esistere, se non esiste il comando termina con messaggio di errore e nessuna copia viene effettuata).

Un altra opzione per trasferire interi alberi di directories tra computer diversi è usare il comando tar. In questa filosofia si produce un archivio di files (magari compresso), si trasferisce il file risultante con sftp o scp, ci si collega interattivamente sul host remoto e si spacchetta l'archivio appena trasferito.
Le sequenza di comandi per fare questo è:

sull'host locale
 cd /var/
 tar cvfz pippo/ archivio.tgz            (questo comando crea il file archivio.tgz che contiene un archivio di tutti i files nella directory "pippo" e nelle directories sottostanti)
 scp archivio.tgz username@didattica1.aquila.infn.it:paperino/      (copia il file archivio.tgz nella directory /home/username/paperino sull'host remoto)
 ssh username@didattica1.aquila.infn.it           (si apre una sessione ssh interattiva sull'hot remoto)

sull'host remoto
 cd paperino                            (si va nella directory /home/username/paperino)
 tar xvfz archivio.tgz              (decomprime e spacchetta completamente il file archivio.tgz, ricreando sull'host remoto tutto l'albero delle directories).
 rm archivio.tgz                      (rimuove il file archivio.tgz dall'host remoto)




Infine è bene notare che il comando scp si può usare anche in senso inverso, ossia per trasferire files dall'host remoto a quello locale. In questo caso basta invertire la sequenza delle opzioni nel comando.
Esempio:     scp   -rp   username@didattica1.aquila.infn.it:paperino/  ./

con questo comando copio tutto il contenuto della directory /home/username/paperino/  nella directory in cui mi trovo sull'host locale.



Nota per utenti Windows:

Coloro che utilizzano Windows possono cercare un applicativo ssh per windows. Con google se ne trovano molti, anche gratuiti. Alcuni esempi:
sshwindows: http://sshwindows.sourceforge.net/
putty: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html


Guardare il sito http://www.jfitz.com/tips/ssh_for_windows.html per un confronto

Un applicativo che forse funziona sotto windows è che usa le icone è Filezilla. Mi dicono che sia ottimo ma io non ho mai provato.

Una possibile alternativa è avere un cd con Ubuntu-Live distribution, una distribuzione Linux Live, ossia che non è necessario installare sul computer. Il computer deve poter fare il boot dal CD. Si inserisce il CD con la distribuzione e si seleziona la modalità Live. Una volta fatto il boot il computer sarà in ambiente Linux e si possono usare il terminale e i comandi in ambiente Linux sopra descritti.