Accesso remoto al proprio computer in una rete eterogenea
Upcoming SlideShare
Loading in...5
×
 

Accesso remoto al proprio computer in una rete eterogenea

on

  • 1,243 views

Condivisione dei file, apertura di una shell sul computer remoto ed (eventualmente) esecuzione di applicazioni grafiche (SSH), accesso alla sessione grafica corrente da remoto (VNC) e sicurezza ...

Condivisione dei file, apertura di una shell sul computer remoto ed (eventualmente) esecuzione di applicazioni grafiche (SSH), accesso alla sessione grafica corrente da remoto (VNC) e sicurezza tramite SSH, apertura di una nuova sessione grafica su server Mac OS X, Windows e Linux, NX e FreeNX, il reverse port forwarding, problemi pratici e soluzioni

Statistics

Views

Total Views
1,243
Views on SlideShare
995
Embed Views
248

Actions

Likes
1
Downloads
16
Comments
0

2 Embeds 248

http://giacomofazio.net 244
http://www.linkedin.com 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Accesso remoto al proprio computer in una rete eterogenea Accesso remoto al proprio computer in una rete eterogenea Document Transcript

  • Accesso remoto al proprio computer in una rete eterogenea Giacomo Antonino Fazio 1
  • Indice generaleAccesso remoto al proprio computer in una rete eterogenea.....................................................................1 1. Condivisione dei file.........................................................................................................................3 2. Apertura di una shell sul computer remoto ed (eventualmente) esecuzione di qualche applicazione grafica....................................................................................................................................................3 2.1 Installazione server SSH.............................................................................................................3 2.2 Uso del client SSH......................................................................................................................5 3. Accesso alla sessione grafica corrente da remoto (VNC).................................................................7 3.1 Configurazione del server VNC.................................................................................................7 3.2 Configurazione del client VNC................................................................................................10 3.3 Rendere sicuro VNC tramite SSH (opzionale).........................................................................13 4. Apertura di una nuova sessione grafica...........................................................................................15 4.1 Apertura di una nuova sessione grafica su server Mac OS X...................................................15 4.2 Apertura di una nuova sessione grafica su server Windows.....................................................16 4.3 Apertura di una nuova sessione grafica su server Linux..........................................................18 5. NX e FreeNX...................................................................................................................................20 5.1 Installare il server NX (max 2 connessioni simultanee)...........................................................21 5.2 Installare il server FreeNX (connessioni simultanee teoricamente illimitate ma niente collegamento alla sessione corrente)..............................................................................................22 5.3 Uso del client............................................................................................................................25 6. Approfondimento: il reverse port forwarding.................................................................................28 6.1 La tecnica..................................................................................................................................28 6.2 Problemi pratici e soluzioni......................................................................................................29 2
  • Lo scopo di questo articolo è essere una guida rapida per laccesso remoto al proprio computer. Loscenario di riferimento è quello di una rete eterogenea, composta cioè da computer con diversi sistemioperativi (Linux, Windows e Mac OS X). Quello che vogliamo ottenere è laccesso ad un computer(server) dagli altri. Verranno analizzate le varie possibilità (sistemi operativi Linux, Windows e MacOS X sia per la parte server che per la parte client).Per quanto riguarda la tipologia di accesso remoto, esso può avvenire in modi diversi, in base alloscopo che si intende raggiungere, si va dalla condivisione di file allapertura di una shell sul computerremoto, fino ad arrivare allinterazione con il desktop del computer remoto, che fornisce un accessoquasi completo ad esso.Vediamo di analizzare uno ad uno i diversi casi.1. Condivisione dei filePer accedere ai file condivisi dal server basta utilizzare i protocolli di condivisione file esistenti, comeNFS, SMB e AFP. Per informazioni dettagliate, vi rimando alla mia guida Condividere file con PCWindows, Linux, MacOS X attraverso i protocolli SMB, NFS e AFP, consultabile allindirizzohttp://www.intilinux.com/linux/691/condivisione-file-in-una-rete-eterogenea-composta-da-pc-con-windows-linux-macos-x-attraverso-i-protocolli-smb-nfs-e-afp/Unalternativa potrebbe essere luso del protocollo FTP, accessibile da qualsiasi macchina conqualunque sistema operativo, mediante appositi programmi come Filezilla o gFTP, da riga di comando,da browser o dal gestore delle finestre (es. Nautilus in Gnome), gli ultimi due inserendo lindirizzoftp://username:password@151.97.9.181.2. Apertura di una shell sul computer remoto ed (eventualmente)esecuzione di qualche applicazione graficaSe abbiamo bisogno della riga di comando possiamo utilizzare SSH, che ci fornisce una shell remotapotente e sicura: i comandi forniti verranno quindi eseguiti sul computer remoto ma riceveremo loutputsul client in uso. Più avanti vedremo come SSH permetta di eseguire anche qualche applicazionegrafica.La prima cosa da fare è installare un server SSH sul server, in modo da consentire ad altre macchine diconnettersi alla propria.2.1 Installazione server SSHPer quanto riguarda Linux, molte distribuzioni contengono OpenSSH nei propri repositories, dunque èpossibile installarlo facilmente. Ad esempio, nelle distribuzioni Ubuntu e Debian (e probabilmenteanche molte altre distribuzioni Debian based) è sufficiente utilizzare i comandi:sudo apt-get updatesudo apt-get install openssh-server openssh-clientIn ogni caso è sempre possibile scaricare OpenSSH dal sito http://www.openssh.com e compilarlomanualmente.Per quanto riguarda Mac OS X Leopard, questo sistema operativo contiene di default OpenSSH, bastasolo attivarlo: andare in Apple → System Preferences e selezionare la voce Sharing. Da qui abilitare le 3
  • due voci Remote Login e Remote Management, selezionando All users alla voce Allow access for, comemostrato dalla figura seguente:A questo punto sarà possibile accedere al nostro Mac via SSH.Diverso il caso di Windows, questo sistema operativo non possiede un server SSH integrato, dunquebisogna usarne uno di terze parti: un esempio è FreeSSHd, gratuito e semplice da utilizzare; almomento dellinstallazione rispondere affermativamente alla richiesta di creazione delle chiavi e allarichiesta di installazione come servizio (in questo modo sarà avviato automaticamente insieme aWindows), subito dopo aprire il programma attraverso licona nella tray e, dalla tab Users inserirelutente da abilitare allaccesso remoto (nel nostro caso Administrator), così come mostrato in figura: 4
  • N.B. Qualunque sia il sistema operativo installato sul server, per ottenere laccesso remoto ènecessario che la porta utilizzata da SSH (solitamente la porta 22) sia aperta, dunque verificareche lo sia dalle impostazioni del proprio firewall.2.2 Uso del client SSHSe il client ha un sistema operativo Linux o Mac OS X, basta usare il seguente comando:ssh -x username@indirizzo dove username e indirizzo vanno sostituiti con i giusti valoried inserire la relativa password. Lopzione -x permette di eseguire qualche applicazione “grafica” sulcomputer remoto, redirezionando loutput in locale e può essere omessa se non si intende richiamareapplicazioni grafiche.Se il client ha invece un sistema operativo Windows, è necessario utilizzare un client SSH di terzeparti, ad esempio lottimo Putty, scaricabile gratuitamente dal sitohttp://www.chiark.greenend.org.uk/~sgtatham/putty . Il programma è semplicissimo da usare, bastainserire i parametri del server a cui connettersi, cioè indirizzo IP del server e porta da usare, comemostrato nella seguente figura:Se si vuole usufruire della possibilità di eseguire applicazioni grafiche redirezionando loutput in locale,bisogna aprire dal menu di sinistra la voce Connection → SSH → X11 e selezionare la checkboxEnable X11 forwarding, come mostrato nella figura seguente: 5
  • Tuttavia è necessario installare sul client un server X, ad esempio Xming, scaricabile dahttp://sourceforge.net/projects/xming/Dopo esserci connessi, vogliamo provare subito la funzionalità di X: se ad esempio ci siamo connessiad un server Ubuntu e scriviamo il comando gedit, avremo loutput sulla nostra macchina Windows,come mostra la figura seguente. 6
  • N.B. Solo le applicazioni grafiche che utilizzano il server X funzioneranno, dunque se avvieremonotepad dopo esserci connessi ad un server Windows oppure TextEdit dopo esserci connessi ad unserver Mac OS X, non riceveremo nessun output oppure esso sarà visualizzato sulla macchinaremota.3. Accesso alla sessione grafica corrente da remoto (VNC)Se si vuole un controllo maggiore sul server che include lesecuzione di applicazioni grafiche e ilcontrollo del desktop, bisogna ricorrere a soluzioni più sofisticate. Stiamo parlando del protocollo VNC(Virtual Network Computing), che permette di controllare il desktop da remoto, inviando input ericevendo loutput, dunque consente di accedere alla sessione correntemente aperta. Se invece sivogliono aprire nuove sessioni (non sempre è possibile), passare al capitolo 4.VNC è un sistema per la condivisione del desktop che utilizza il protocollo RFB allo scopo diamministrare il proprio computer a distanza: installando un server VNC sulla propria macchina edimpostando unopportuna password si consente ai client VNC di ricevere unimmagine dello schermo edi inviare input di tastiera e mouse al server; in pratica si può gestire il server da unaltra postazione,come se fosse il proprio computer fisico. Il protocollo RFB, usato da VNC, è molto semplice, basato suuna primitiva grafica inviata dal server al client (“Disegna un rettangolo di pixel alla posizione X,Yspecificata”), tenendo conto che limmagine deve essere via via aggiornata. Tuttavia, questo fa sì cheVNC, nella sua forma più semplice, utilizzi spesso molta banda, ecco perché sono stati messi a puntodiversi meccanismi per ridurre loverhead di comunicazione. Ad esempio è possibile inviare solo irettangoli che cambiano tra un frame e il successivo, ma questo meccanismo ovviamente funziona benesolo se una piccola porzione di schermo è cambiata (ad esempio il puntatore del mouse che si èspostato o un carattere che è stato scritto), mentre perdiamo quasi tutti i vantaggi se ad esempiovogliamo vedere un video oppure spostare una finestra. La conseguenza ovvia è che VNC dà il megliodi sé nel caso in cui si utilizzi una connessione a banda larga (connessione LAN, ADSL, ecc.).Per quanto riguarda laspetto sicurezza, di default VNC non è sicuro, in quanto i dati sono trasmessi inchiaro. Tuttavia è possibile renderlo sicuro effettuandone il tunneling su una connessione SSH o VPN,in modo che i dati vengano inviati in un tunnel interamente cifrato (lo vedremo nel paragrafo 3.3).VNC può essere utilizzato su Linux anche per creare nuove sessioni alle quali accedere, tuttavia inquesto paragrafo parleremo soltanto dellaccesso alla sessione corrente, cioè il cosiddetto “desktopsharing”.N.B. Se il server a cui connettersi utilizza Linux, conviene lasciar perdere VNC e passare a NX(vedi capitolo 5), per completezza luso di VNC verrà comunque trattato anche su Linux.3.1 Configurazione del server VNCLa prima cosa da fare è abilitare un server VNC sul proprio server, in modo da consentire laconnessione dallesterno.Per quanto riguarda Linux, un ottimo programma è vino, fornito di default con molte distribuzioni tracui Ubuntu, ed installabile sulle distribuzioni Debian like con i comandisudo apt-get updatesudo apt-get install vino 7
  • Dopo aver installato il programma, basta andare nel menu System → Preferences e avviare RemoteDesktop, che permette di configurare facilmente il desktop sharing, come mostrato nella finestraseguente:Si consiglia di inserire una password per sicurezza e di lasciare come porta la 5900 (opzione di default).Unaltro programma che è possibile utilizzare su Linux, soprattutto se si utilizza KDE, è krfb,installabile mediante il comandosudo apt-get updatesudo apt-get install krfbPer quanto riguarda lattivazione del server VNC in Mac OS X, andare in Apple → System Preferencese selezionare la voce Sharing. Da qui abilitare le due voci Remote Login e Remote Management,selezionando All users alla voce Allow access for, come mostrato dalla figura seguente: 8
  • Fare quindi click sul pulsante Computer Settings indicato dalla freccia, e abilitare le voci mostrate nellaseguente figura:Inserire una password sicura nellapposito campo. Abbiamo così attivato il server VNC presente su MacOS X. Unaltra possibilità sarebbe affidarsi allottimo Apple Remote Desktop 3, che si basa su VNC maè una soluzione proprietaria e commerciale di Apple, potente ma non gratuita, quindi non è il caso di 9
  • utilizzarla se non per esigenze particolari, dato che è facilmente sostituibile per le comuni esigenze.Per quanto riguarda Windows, anche in questo caso bisogna come al solito sfruttare programmi di terzeparti. La scelta non manca di certo, esistono TightVNC, RealVNC e molti altri, tutti dotati di interfacciagrafica intuitiva.N.B. Qualunque sia il sistema operativo installato sul server, è necessario che la porta utilizzatadal server VNC (ad esempio la porta 5900) sia aperta, dunque verificare che lo sia dalleimpostazioni del proprio firewall.3.2 Configurazione del client VNCDopo aver eseguito correttamente la connessione SSH, è necessario utilizzare un client VNC.Nel caso di Mac OS X un ottimo client VNC è Chicken of the VNC, se si utilizza Windows è possibileutilizzare UltraVNC Viewer, mentre se siamo su Unix/Linux la scelta è molto più ampia: tra i numerosiclient VNC che ho provato, uno dei migliori è sicuramente Krdc, ma in caso di problemi è possibileaffiancarlo a Remote Desktop Viewer (Vinagre) o Terminal Server client, installabili tramite i comandi(se usiamo una distrubuzione Debian/Ubuntu o simili)sudo apt-get updatesudo apt-get install krdc vinagre tsclientConsideriamo solamente il caso Linux, dato che i client VNC sono comunque molto semplici da usaree si differenziano di poco da quello che vedremo.Avviamo Remote Desktop Viewer (Vinagre) e clicchiamo sul primo pulsante, avremo una schermatasimile a questa: 10
  • Inserire lindirizzo dellhost e la porta (ad esempio 5901; 5900 se abbiamo usato vino o krfb con leimpostazioni di default). Dovremmo ottenere rispettivamente schermate simili a queste: 11
  • Se è così ed è possibile interagire con i desktop remoti, tutto funziona a dovere. 12
  • Alcune considerazioni infine sulluso di VNC: purtroppo esso non è esente da bug o da caratteristicheche potrebbero essere meglio implementate.Ad esempio ci potrebbero essere inizialmente problemi di risoluzione (spesso troppo piccola), checomunque possono essere corretti semplicemente adattando la risoluzione dallapposito menu delsistema operativo che si sta controllando.Un altro problema è dovuto al fatto che a volte qualche client VNC non riesce a connettersi al serverVNC richiesto, in tal caso basta cambiare client VNC oppure diminuire leggermente la qualità dellaconnessione utilizzata dalle impostazioni di VNC.Un altro problema abbastanza fastidioso si presenta nel caso in cui non si utilizza una tastieraamericana e si ottiene una mappatura dei tasti non corrispondente a quella realmente utilizzata (sembrache chi ha implementato VNC non abbia tenuto conto del fatto che al mondo esistono numerosi layoutdi tastiera oltre a quello americano). A niente valgono i tentativi di sistemare il layout sul sistemaoperativo controllato. Sembra ci sia tuttavia un workaround, basta selezionare il layout della tastieraamericana sul proprio computer e assicurarsi che sul computer controllato sia selezionato il layout dellatastiera realmente utilizzata (nel nostro caso quella italiana, Italian Pro per Mac OS X). A questoproposito è molto semplice switchare sul proprio computer tra il proprio layout e quello americano: suWindows basta utilizzare la barra della lingua e switchare mediante la combinazione Left Alt+LeftShift, su Mac OS X basta installare dalle preferenze di sistema entrambi i layout e abilitare la presenzadellicona di scelta rapida nella barra in alto, quindi switchare direttamente da questa icona, su Linuxbasta installare entrambi i layout e aggiungere al pannello di Gnome lapplet Keyboard Indicator.3.3 Rendere sicuro VNC tramite SSH (opzionale)Possiamo dire che VNC non offre sicurezza, considerando che le informazioni sono inviate in “plaintext”. Per ovviare a questo problema è possibile incapsulare il traffico di VNC allinterno di un tunnelSSH, che cifri le informazioni per rendere "sicura" la connessione. Lidea di base è schematizzata nellafigura seguente: VNC client VNC server Client Server SSH client SSH serverNegli esempi finora visti il client VNC si connette direttamente al server VNC, con i problemi disicurezza che ne derivano. Adesso invece creeremo una connessione SSH tra il client e il server efaremo in modo che il client VNC mandi le sue informazioni al client SSH, che le invia tramite unaconnessione cifrata al server SSH, che a sua volta le trasferisce al server VNC. Per ottenere tutto ciònbisogna effettuare i seguenti passaggi: 1) Configurazione del server VNC 2) Creazione connessione SSH tra client e server: effettuare la connessione SSH al server, facendo in modo che una porta locale sia redirezionata sulla porta del server su cui ascolta il server VNC (ad esempio la 5901), in modo che ad esempio una chiamata locale alla porta 5901 abbia leffetto di chiamare il server alla porta 5901. 13
  • 3) Uso del client VNC: con la connessione SSH effettuata al punto 1) ancora aperta, bisogna aprire il client VNC che utilizziamo ed inserire come indirizzo localhost, specificando come porta quella stabilita al punto precedente che redirezionerà i dati sulla porta remota su cui ascolta il server VNC.Vediamo adesso più nel dettaglio come effettuare queste operazioni.La parte server è identica a quanto specificato nel paragrafo 3.1.Per quanto riguarda il client la prima cosa da fare è creare il tunnel SSH. Dobbiamo in pratica effettuarela connessione SSH al server, facendo in modo che una porta locale sia redirezionata sulla porta remotausata dal server VNC. Occorre comunque verificare prima che la porta locale da usare non sia già usatada qualche altro servizio (ad esempio un server VNC attivo sul nostro client), in tal caso dobbiamoscegliere unaltra porta locale, ad esempio la 5910.Se abbiamo un client con sistema operativo Unix/Linux o Mac OS X eseguire il comandossh -N -f -L local_port:server_address:VNC_remote_port username@server_addressdove a server_address, username, local_port e remote_port bisogna sostituire i propri dati, ad esempiossh -N -f -L 5901:192.168.0.2:5901 pippo@192.168.0.2(in questo caso abbiamo creato un tunnel SSH al server 192.168.0.2, redirezionando la porta locale5901 sulla porta remota 5901; i parametri -N e -f fanno sì che il comando SSH appena lanciato vengausato semplicemente per creare il tunnel e vada poi in background).Per quanto riguarda luso di SSH con Windows, questo sistema operativo, al contrario di Linux e MacOS X, non dispone di un client SSH, dunque è necessario installarne uno di terze parti, ad esempiolottimo Putty (scaricabile gratuitamente da http://www.chiark.greenend.org.uk/~sgtatham/putty/). Ilprogramma è semplicissimo da usare, basta inserire i parametri del server a cui connettersi. Ununicanota riguarda come attivare il port forwarding: fare clic nel menu a sinistra sulla voce Connection →SSH → Tunnels ed inserire ciascuna regola nei due campi Source Port e Destination, come mostratonella figura seguente per la porta 5902 e cliccare sul pulsante Add per aggiungere la regola. 14
  • Alla fine fare clic sul pulsante Open per aprire la connessione. E anche possibile salvare il profilocorrente in modo da poterlo caricare facilmente ad ogni avvio di Putty. Per fare questo, dopo averimpostato tutte le regole e lindirizzo a cui connettersi, selezionare dal menu a sinistra la voce Session.Nella sezione Saved sessions presente sulla destra, scrivere il nome da assegnare al profilo corrente, adesempio appleserver e premere Save, come mostrato in figura:Al prossimo avvio sarà possibile caricare il profilo appleserver selezionandolo da questa finestra epremendo poi Load.Adesso dobbiamo utilizzare il client VNC. Vale quanto detto nel paragrafo 3.2, con leccezione chequesta volta lindirizzo a cui connettersi è localhost, mentre la porta è quella locale, che redirezionerà idati automaticamente alla porta remota su cui ascolta il server VNC. Questo comporta che, non soloavremo la nostra connessione VNC resa sicura da SSH, ma anche che per il server VNC la connessionearriverà dallinterno, perciò non sarà più necessario aprire mediante il firewall la porta utilizzata (anziverificare che sia chiusa, dato che la sua apertura non ci serve più e potrebbe causare problemi disicurezza).4. Apertura di una nuova sessione graficaTramite questa modalità è possibile aprire una nuova sessione sulla macchina remota che verràvisualizzata in locale. Tuttavia questo non è sempre possibile, in ogni caso le tecnologie utilizzatecambiano in base al sistema operativo usato dal server, quindi in questo capitolo la distinzione verràfatta in base a questo parametro.4.1 Apertura di una nuova sessione grafica su server Mac OS XPer quanto riguarda Mac OS X, per il momento non mi sembra sia possibile aprire una nuova sessioneremota, quindi lunica possibilità rimane luso di VNC per connetterci alla sessione corrente. 15
  • 4.2 Apertura di una nuova sessione grafica su server WindowsSu piattaforma Windows possiamo utilizzare il protocollo RDP (Remote Desktop Protocol), sviluppatoda Microsoft per connettersi a computer che implementano Microsoft Terminal Services. Questultimoè il componente che si occupa di permettere il controllo del desktop da remoto e, nelle versioni Serverdi Windows, consente lapertura di sessioni remote concorrenti.Questa soluzione sembra funzionare egregiamente, tuttavia si tratta di una soluzione proprietaria echiusa e, come ci si aspetterebbe, non gratuita, o almeno non completamente, anche se la politicaseguita spesso varia in base alle versioni di Windows. Ad esempio, per la versione 2003 Server, oltrealla licenza del server è infatti necessario munirsi di una Client Access License (CAL), che vaacquistata e legata allutente che si connette (Per user) o al dispositivo utilizzato per connettersi (Perdevice). Senza una licenza CAL, è possibile avere solo tre connessioni remote simultanee, che aseconda dei casi, potrebbero essere sufficienti ma potrebbero anche non bastare. Vediamo come attivaresul nostro server Windows il supporto a Remote Desktop, prendendo come esempio un server Windows2003 Server (la procedura dovrebbe essere pressochè identica in Windows XP). Andare in Pannello dicontrollo → Sistema e selezionare la tab Remote, abilitando in essa la checkbox Enable RemoteDesktop on this computer, come mostrato nella figura seguente.Fare clic sul pulsante Select Remote Users..., poi sul pulsante Add e scivere nella textbox indicata dalriquadro il nome dellutente da abilitare alla connessione remota (in questo caso Administrator): 16
  • Dare OK un paio di volte per salvare il tutto. A questo punto lutente Administrator è abilitato allaconnessione da remoto.Tenendo conto delle limitazioni di cui abbiamo già parlato sul massimo numero di connessionisimultanee, a questo punto ci serve un client per aprire una nuova sessione sul server Windows.Se il client è una macchina Windows o Mac OS X, è possibile sfruttare il programma Remote DesktopConnection Client fornito gratuitamente da Microsoft, mentre se il client è Linux un ottimo programmaè Remote Desktop Client, installabile su distribuzioni Debian/Ubuntu o simili tramite i seguenticomandi:sudo apt-get updatesudo apt-get install rdesktopPer testare il corretto funzionamento, prendiamo come esempio il caso Linux, utilizzando quindi ilsoftware Remote Desktop Client. Otterremo una schermata simile a questa: 17
  • Inserire lindirizzo del server, lo username dellutente abilitato e la relativa password, selezionaredallelenco Windows XP/2003 ed eventualmente modificare i parametri presenti nelle altre tab delprogramma. Subito dopo premere il pulsante Execute. Dovremmo ottenere una schermata simile aquesta:Se è così ed è possibile interagire con il desktop di Windows, allora tutto funziona correttamente.4.3 Apertura di una nuova sessione grafica su server LinuxPer quanto riguarda Linux, grazie allarchitettura client-server di X abbiamo a disposizione più di unasoluzione per aprire nuove sessioni da remoto.La soluzione più semplice è utilizzare lo stesso VNC, ma non è certo la soluzione migliore, in quantoesiste il protocollo NX, superiore a VNC sotto ogni punto di vista, quindi conviene saltare questoparagrafo e passare direttamente al capitolo 5. Tuttavia per completezza vedremo di seguito luso diVNC su server Linux.Il programma da installare sul server si chiama TightVNC, ed è possibile installarlo facilmente nelledistribuzioni Debian/Ubuntu o simili mediante i comandi 18
  • sudo apt-get updatesudo apt-get install tightvncserverTightVNC utilizza di default le porte TCP a partire dalla 5901, ognuna delle porte usate corrisponde aun desktop separato (:2 ad esempio corrisponde alla porta 5902), tuttavia è possibile configurarlo anchein altri modi.tightvncserver funziona solo da riga di comando, quando viene lanciato si occupa di creare undesktop virtuale a cui è possibile collegarsi.Nella creazione del desktop virtuale, viene seguito quanto specificato nel file ~/.vnc/xstartup , dove~ indica la propria home. Spesso tale file è configurato in modo tale che il desktop virtuale creato nonutilizzi Gnome o KDE, ma un DE più leggero, tuttavia se si sostituisce il contenuto di tale file con leseguenti due righe, dovremmo poter accedere a Gnome:unset SESSION_MANAGERexec /usr/bin/dbus-launch --exit-with-session gnome-sessionIn maniera simile dovrebbe essere possibile accedere a KDE.Da poco tempo è possibile utilizzare TightVNC mediante una comoda interfaccia grafica, Py-TightVNC, creata da due studenti dellUniversità di Catania, Giuseppe Moscato e Giovanni Altamore,sotto la mia supervisione. Il programma è tuttora in via di sviluppo, quindi è possibile trovare ancoraqualche bug, ma sicuramente raggiunge lobiettivo che si prefigge. Il programma è scaricabile allahomepage http://py-tightvnc.sourceforge.net/, trovate una recensione con una guida rapida alluso nelsito http://www.intilinux.com/programmazione/791/py-tightvnc-gui-per-tightvnc-su-linux/ , mentre ilmanuale duso è presente al link http://repo.intilinux.com/doc/py-tightvnc_relazione.pdf . In questasede mostreremo solo qualche schermata per spiegare come funziona: 19
  • Il pulsante New Desktop crea appunto un nuovo desktop virtuale, mostrato nella finestra seguente:Il pulsante Kill che si trova accanto al numero del desktop permette di eliminarlo. Cliccando più voltesu New Desktop vengono creati di seguito desktop successivi. Infine il pulsante Kill all uccide tutti idesktop attivi.Per quanto riguarda il client, vale quanto esattamente quanto detto nel paragrafo 3.2, basta specificarenel client lindirizzo del server a cui connettersi e la porta (es. 5901 per il desktop :1, 5902 per ildesktop :2 e così via).5. NX e FreeNXNX è un protocollo sviluppato dallazienda italiana NoMachine, che permette di eseguire sessioniremote di X attraverso un client prodotto dalla stessa NoMachine che gira su sistemi operativi Linux,Windows, Mac OS X e Solaris. Inoltre vengono attuate delle sapienti politiche di compressione deltraffico X e di gestione della cache, evitando gli scambi di dati inutili ed attuando un controllo di flussoche permette una gestione delle sessioni remote che funziona ottimamente anche su computer collegaticon reti lente. Ma le caratteristiche che fanno di NX un protocollo veramente appetibile sono:possibilità di connessione ad una sessione già aperta (session shadowing), possibilità di aprire unanuova sessione, possibilità di disconnettersi da una sessione senza terminarla (session persistence), inmodo che i programmi lanciati continuino a girare e che sia possibile riconnettersi a quella sessione infuturo anche da unaltra macchina, file sharing e printing support, possibilità di incapsulare connessioniVNC e RDP, sicurezza grazie alluso di SSH per cifrare le connessioni. Una descrizione piùapprofondita esula dagli scopi di questo articolo, tuttavia è possibile avere unidea abbastanzadettagliata del funzionamento di NX dando unocchiata al sito di NoMachine e in particolare allapagina http://www.nomachine.com/documents/getting-started.php 20
  • Come abbiamo già detto, i client sono disponibili gratuitamente per tutte le piattaforme, mentre ilserver è per il momento presente solo per Linux. In particolare, il server si può trovare nella versionefree (gratuita, ma limitata, in quanto consente la connessione simultanea di massimo due utenti),oppure in altre versioni via via meno limitate ma sempre più costose. Le impressioni derivatedallutilizzo della versione free sono ottime, il sistema è reattivo e sembra quasi di lavorare in locale,inoltre la funzione di “session persistence” funziona benissimo (se ci si disconnette dalla sessione incorso senza terminarla e si lascia qualche processo in esecuzione, esso continuerà ad essere eseguito ead una successiva riconnessione sarà possibile vederne i progressi).Ma cè di più. NoMachine ha infatti abbracciato il concetto di open-source, mettendo a disposizionesotto licenza GPL il codice sorgente dei tools e delle librerie (components) della propria tecnologia.Questo ha favorito il miglioramento di tali tecnologie, e ha anche permesso la creazione di FreeNX,ossia un server open-source per NX e completamente free, quindi senza le limitazioni riguardanti ilnumero massimo di utenti presenti nella versione free del server originale di NoMachine. FreeNXfunziona egregiamente, anche se non ai livelli del server originale, soprattutto perchè qualchefunzionalità non funziona ancora correttamente, come la connessione ad una sessione già aperta, chedeve ancora essere implementata; è inoltre compatibilissimo con i client ufficiali forniti da NoMachinegratuitamente per tutte le piattaforme.Tenuto conto di questi fattori, la scelta tra NX e FreeNX dipende dalluso che si intende fare di questatecnologia: per un uso domestico sicuramente è consigliabile usare la versione free del server diNoMachine (2 connessioni remote simultanee dovrebbero essere sufficienti), ma se invece è necessarioavere a disposizione molte connessioni remote simultanee conviene orientarsi verso FreeNX, dato chenon ha limitazioni sul numero di utenti che possono connettersi e funziona comunque egregiamente,rinunciando tuttavia alla possibilità di connettersi alla sessione corrente (per quello si può sempreutilizzare un server VNC come vino). Analizziamo i due casi uno alla volta.5.1 Installare il server NX (max 2 connessioni simultanee)È necessario scaricare ed installare i programmi NXClient, NXNode e NXServer dal sito di NoMachine,dalla sezione NX Free Edition for Linux ed installarli seguendo questo ordine. E presente sia laversione a 32 che a 64 bit, inoltre oltre ai sorgenti è possibile scaricare direttamente i file .rpm e .deb inbase alla distribuzione utilizzata (nel caso di Debian/Ubuntu e simili scaricare i .deb).Tenere presente che è necessario avere installato un server SSH: molte distribuzioni contengonoOpenSSH nei propri repositories, dunque è possibile installarlo facilmente. Ad esempio, nelledistribuzioni Ubuntu e Debian (e probabilmente anche molte altre distribuzioni Debian based) èsufficiente utilizzare i comandi:sudo apt-get updatesudo apt-get install openssh-server openssh-clientIn ogni caso è sempre possibile scaricare OpenSSH dal sito http://www.openssh.com e compilarlomanualmente.Dopo linstallazione, è possibile avviare il server mediante il comandosudo /usr/NX/bin/nxserver --installe se tutto va per il verso giusto, il comando 21
  • sudo /usr/NX/bin/nxserver --statusdovrebbe darci il seguente output:NX> 900 Connecting to server ...NX> 110 NX Server is running.NX> 999 Bye.5.2 Installare il server FreeNX (connessioni simultanee teoricamenteillimitate ma niente collegamento alla sessione corrente)La sua installazione richiede download e installazione di NXClient, NXNode e dei components open-source messi a disposizione da NoMachine, tuttavia è necessario installare una versione più vecchia diessi, in quanto lo sviluppo di FreeNX procede un po più a rilento rispetto a quello dei componenti diNoMachine e non sembra funzionare con le ultime versioni di essi.Le istruzioni per installare FreeNX sulla macchina virtuale Ubuntu sono state prese dal sitohttp://www.felipe-alfaro.org/blog/2007/11/24/installing-freenx-071-on-ubuntu/ , riadattate alla nostrasituazione e aggiornate e vengono qui riportate:Installazione dei componenti binari di base di NoMachineDiventare root mediante il comandosudo -sspostarsi in /usrLanciare i seguenti comandi:wget e poi tar zxvf repo/nxserver-3.0.0-79.x86_64.tar.gzwget e poi tar zxvf repo/nxclient-3.0.0-84.x86_64.tar.gzwget e poi tar zxvf repo/nxnode-3.0.0-93.x86_64.tar.gzCompilazione delle librerie di compressione NXEstrarre nxcomp mediante il comando:wget e poi tar zxvf repo/nxcomp-3.0.0-48.tar.gzInstallare alcuni pacchetti (propedeutici per il ./configure di nxcomp) mediante il comando:apt-get install zlib1g-dev libX11-dev libjpeg-dev libpng12-dev x11proto-xext-dev libxdamage-dev libxrandr-dev libxtst-dev libaudiofile-devEseguire i seguenti comandi:cd nxcomp./configure --prefix=/usr/NXmakecp -P libXcomp.so* /usr/NX/lib 22
  • Adesso è il turno di nxcompext, nx-X11 e la patch Nxlib-xgetioerror.patch. Estrarre i file mediante iseguenti comandi:wget e poi tar zxvf /home/ubuntu/Downloads/Linux/FreeNX/nxcompext-3.0.0-18.tar.gzwget e poi tar zxvf /home/ubuntu/Downloads/Linux/FreeNX/nx-X11-3.0.0-37.tar.gzApplicare la patch mediante il comando:cd nxcompextwget e poi patch -p0 < /home/ubuntu/Downloads/Linux/FreeNX/Nxlib-xgetioerror.patchEseguire i seguenti comandi:./configure --x-includes="/usr/include/xorg -I/usr/include/X11" --prefix=/usr/NXmakecp -P libXcompext.so* /usr/NX/libAdesso decomprimere nxcompshad, mediante il comandowget e poi tar zxvf /home/ubuntu/Downloads/Linux/FreeNX/nxcompshad-3.0.0-19.tar.gzed eseguire i seguenti comandi:cd nxcompshad./configure --prefix=/usr/NXmakecp -P libXcompshad.so* /usr/NX/libLultimo componente è nxesd, estrarlo mediante il comandowget e poi tar zxvf /home/ubuntu/Downloads/Linux/FreeNX/nxesd-3.0.0-4.tar.gzed eseguire i seguenti comandi:cd nxesd./configure --prefix=/usr/NXmakemake installAdesso è arrivato il momento di installare FreeNX 0.7.2, estrarlo mediante il comandowget e poi tar zxvf /home/ubuntu/Downloads/Linux/FreeNX/freenx-server-0.7.2.tar.gzed applicare la patch gentoo-nomachine.diff mediante i comandicd freenx-server-0.7.2patch -p0 < gentoo-nomachine.diffAdesso bisogna sostituire i file di FreeNX a quelli di NoMachine presenti in /usr/NX/bin:cp -f nxkeygen /usr/NX/bin/ 23
  • cp -f nxloadconfig /usr/NX/bin/cp -f nxnode /usr/NX/bin/cp -f nxnode-login /usr/NX/bin/cp -f nxserver /usr/NX/bin/cp -f nxsetup /usr/NX/bin/cp -f nxcups-gethost /usr/NX/bin/Compilare adesso nxserver-helper, mediante i comandicd nxserver-helpermakecp -f nxserver-helper /usr/NX/bin/Adesso dobbiamo installare alcuni pacchetti:apt-get install expect smbfs openssh-serverAdesso bisogna creare dei link simbolici:ln -sf /usr/NX/bin/nxserver /usr/bin/nxserverln -sf /usr/NX/bin/nxsetup /usr/sbin/nxsetupln -sf /usr/NX/bin/nxloadconfig /usr/sbin/nxloadconfigln -sf /usr/NX/lib/libXrender.so.1.2.2 /usr/NX/lib/libXrender.so.1.2ln -sf /usr/NX/bin/nxagent /usr/NX/bin/nxdesktopln -sf /usr/NX/bin/nxagent /usr/NX/bin/nxviewerln -sf /usr/bin/foomatic-ppdfile /usr/lib/cups/driver/foomatic-ppdfileln -sf /etc/X11/xinit /etc/X11/xdmln -sf /sbin/mount.cifs /sbin/smbmountln -sf /sbin/umount.cifs /sbin/smbumountA questo punto installare FreeNX, mediante il comandonxsetup --installTale comando si occuperà di effettuare linstallazione e la creazione dellutente nx. Alla richiesta seusare o meno le chiavi di NoMachine si può tranquillamente rispondere di sì (scelta di default), inquanto già così il sistema è abbastanza sicuro, tuttavia si può anche usare una chiave appositamentegenerata e in questo caso ogni client che vuole connettersi al server FreeNX deve possedere questachiave. Prima di poter usare FreeNX è comunque necessario creare il file node.conf che contiene laconfigurazione di FreeNX, conviene crearlo dal file di default:cd freenx-server-0.7.2cp node.conf.sample /usr/NX/etc/node.confEditare il file node.conf appena creato sistemando eventualmente i settaggi. Le parti che si potrebberomodificare sono le seguenti:SESSION_LIMIT=200SESSION_USER_LIMIT=200DISPLAY_LIMIT=200ENABLE_CLIPBOARD="both" 24
  • NX_LOG_LEVEL=3NX_LOG_SECURE=1NX_LOGFILE=/var/log/nxserver.logLinstallazione di FreeNX è terminata e a questo punto sarà possibile connettersi.5.3 Uso del clientA questo punto occorre procurarsi un client, come già detto vanno benissimo i client offertigratuitamente da NoMachine, presenti praticamente per ogni piattaforma e scaricabili dal loro sito (perle distribuzioni Debian/Ubuntu utilizzare il file .deb, per le altre compilare il file sorgente). Adessospiegherò come utilizzare il client su Linux, tuttavia le seguenti informazioni valgono per tutte lepiattaforme supportate, dato che i client sono identici.Dopo aver scaricato ed installato il file .deb, avviare NX Connection Wizard (nella mia Ubuntu si trovanel menu Applications → Internet → NX Client for Linux). Dopo la pagina di benvenuto, avremo unaschermata dove inserire alcune informazioni, cioè un nome da dare alla sessione, lindirizzo dellhost edella porta, nonché il tipo di connessione, come mostrato nella figura seguente:Premere Next. Nella schermata successiva occorre selezionare i parametri giusti in base allaconfigurazione del server, ad esempio: 25
  • In questo modo creeremo una nuova sessione.Se invece di Unix selezioniamo Shadow nella finestra precedente, sarà possibile connettersi ad unasessione già presente (questa funzione non funzionerà se il server è FreeNX).La schermata successiva permette di scegliere se avere o meno unicona sul desktop che puntidirettamente alla connessione (è possibile evitarlo, in tal caso per richiamare il client bisogneràscegliere dal menu la voce “NX Client” e selezionare da un elenco la sessione richiesta) e se si vuoleaprire la finestra delle impostazioni avanzate (richiamabile eventualmente anche in un secondomomento).Le impostazioni di default nella finestra delle impostazioni avanzate vanno già bene, al più abilitareSMB printing e Multimedia support dalla tab Services.Proviamo adesso la connessione, richiamabile dallicona sul desktop (se lavete creata) oppure da NXClient for Linux, selezionabile dal menu Applications → Internet → NX Client for Linux. 26
  • Inserire nome utente e password dellutente presente sul server, cambiare eventualmente leimpostazioni dalla voce Configure e infine premere Login.Nel giro di alcuni secondi dovremmo vedere sul nostro schermo la nuova sessione creata sul server epoter interagire con essa in modo fluido e quasi naturale:Al momento di terminare il nostro lavoro con questa sessione, se clicchiamo sulla X di chiusura dellafinestra potremo scegliere se terminare la sessione o disconnetterci semplicemente: in questultimo casola sessione continuerà ad essere attiva e i lavori lanciati continueranno ad essere eseguiti, conpossibilità di riconnessione futura.Se invece dalle impostazioni di connessione abbiamo scelto Shadow, otterremo una finestra che elencale sessioni attive, da cui bisogna scegliere quella a cui collegarsi (questa funzione non funzionerà se ilserver è FreeNX, inoltre non otterremo la stessa qualità di una nuova sessione).Unultima funzione che risulta interessante è lincapsulamento di RDP e VNC in NX. NX supporta RDP 27
  • e VNC richiamando il client giusto (rdesktop o il client VNC) direttamente dalla sessione X. Questopermette una maggiore efficienza, in quanto le stesse tecniche di compressione e di sicurezza utilizzateda NX possono essere applicate anche a questi casi, sebbene non si abbia lo stesso livello di efficienza.Praticamente per effettuare questo si utilizza il normale client NX che deve connettersi ad un server NXche poi andrà a richiamare il client RDP o VNC. Per approfondire il funzionamento di questo aspetto,si rimanda al sito di NoMachine.6. Approfondimento: il reverse port forwardingTutte le operazioni viste finora presuppongono che le porte del server relative ai servizi descritti sianoaperte per i client che vogliono utilizzare tali servizi.Supponiamo invece di trovarci nel caso in cui tali porte siano aperte solo per un gruppo di client: siamoad esempio sul posto di lavoro e possiamo accedere al server solo da qui, vorremmo poterlo fare ancheda casa (ovviamente abbiamo il permesso ;-)). Se avessimo un IP fisso il problema non si porrebbe,perchè basterebbe aprire le porte dal firewall del server anche per tale IP. Ma con un indirizzo IPdinamico come si fa? Potremmo utilizzare un servizio come DynDNS o no-IP, che ci danno un nome dihost fisso collegato volta dopo volta allIP che stiamo utilizzando (basta aggiornarne il collegamentodal sito del servizio oppure utilizzare uno dei programmi che fa questo automaticamente), ma nonsempre il firewall permette di specificare un hostname e richiede invece un indirizzo IP, in tal caso nonavremmo risolto nulla. Potremmo ancora utilizzare un proxy che si trova sul posto di lavoro e quindipuò accedere al server e che nello stesso tempo sia accessibile anche da casa nostra, ma non semprequesto è fattibile.Come risolviamo dunque? Attraverso il reverse port forwarding, ovvero se non possiamo entrare noidirettamente nel server, facciamoci chiamare da lui :-)6.1 La tecnicaLidea è questa: creiamo una connessione SSH tra il server e il nostro client, redirezionando alcuneporte del nostro client sul server. Questo è il comando da lanciare sul server:ssh -N -f -R remote_port:local_address:local_port remote_username@remote_addressdove a remote_port, local_address, local_port, remote_username e remote_address bisogna sostituire ipropri dati, ad esempiossh -N -f -R 5555:192.168.0.1:22 -R 5910:192.168.0.1:5901 pippo@192.168.0.33In questo caso abbiamo creato una connessione SSH tra il server (con indirizzo 192.168.0.1) e il nostroclient (che ha indirizzo 192.168.0.33 e username pippo), redirezionando le porte remote (quindi delnostro client) 5555 e 5910 rispettivamente sulle porte locali (quindi sul server) 22 e 5901 (porte su cuiabbiamo in ascolto rispettivamente un server SSH e un server VNC); volendo si possono aggiungereanche altre porte; i parametri -N e -f fanno sì che il comando SSH appena lanciato venga usatosemplicemente per fare il redirecting e vada poi in background.Instaurata la connessione (dopo aver inserito la password e tutte le informazioni necessarie), a questopunto potremo lanciare sul nostro client un comando del genere 28
  • ssh -p 5555 server_username@localhost(server_username e la password richiesta al lancio del comando sono ovviamente quelli del server) eavremo una shell SSH sul server controllabile dal nostro client dovunque ci troviamo, anche da casa,bypassando così il firewall del server. Inutile dire che se sul server cè Linux e FreeNX, possiamoutilizzare la connessione SSH per aprire una nuova sessione grafica sul server! Allo stesso modo, sulnostro client possiamo aprire un client VNC ed inserire come hostname localhost e come porta la 5910,per poter controllare lo schermo del server a distanza.Da notare la somiglianza con gli altri comandi SSH visti nel corso di questo tutorial, solo che lì siusava lopzione -L (per redirezionare le porte locali su quelle remote), qui al contrario si usa lopzione -R (per redirezionare le porte remote su quelle locali).Questa è la spiegazione della tecnica, adesso bisogna risolvere alcuni problemini pratici.6.2 Problemi pratici e soluzioniIl primo problema che viene fuori è il fatto che la connessione SSH si interrompe per mille motivi (adesempio se spegnamo il client), una volta che siamo a casa dovremmo chiamare un amico sul posto dilavoro e chiedergli di lanciare il comando di SSH, passandogli ovviamente il nostro indirizzo IPdinamico del momento, nome utente e password: scomodo, non sempre possibile e decisamente troppomacchinoso.Alternativa: creiamo uno script che contiene i nostri parametri e lancia il comando per la connessioneSSH al nostro client e facciamolo eseguire sul server a intervalli regolari, in modo da assicurarci unaconnessione SSH pressochè perpetua. I problemi con questo approccio sono due:1. Non possiamo più usare lindirizzo IP dinamico, ma ci vuole qualcosa di fisso: fortunatamente SSH permette di specificare gli hostname, quindi possiamo utilizzare uno dei servizi come DynDNS o no-IP di cui parlavo prima, dopo aver verificato che il nostro hostname (che chiameremo per esemplificare pippo.dyndns.org) sia collegato al nostro IP attuale.2. Il comando ssh è interattivo e ci chiederà password ed eventuali altre informazioni e non mi risulta ci sia modo per mettere la password direttamente nel comando: ci viene in aiuto Expect, un programma che ci permette di pianificare, sotto forma di script, una serie di “a domanda X rispondi Y e proseguiamo con la prossima”; se non è già installato sulla distribuzione che usate, generalmente si trova nei repositories (con Debian, Ubuntu e derivate basta un apt-get install expect)Dunque sembra che ce labbiamo fatta: ecco il nostro script, chiamato test.exp e reso eseguibile con unbel sudo chmod +x test.exp, molto grezzo per il momento:#!/usr/bin/expectspawn ssh -N -f -R 5555:192.168.0.1:22 -R 5910:192.168.0.1:5900 pippo@pippo.dyndns.orgexpect "*(yes/no)?"send "yesr"expect "*assword:"send "password_sceltar"send -- "r"expect eofOvviamente a password_scelta bisogna sostituire la propria password. Facendo sì che tale script venga 29
  • eseguito ad intervalli regolari e non troppo lunghi ci si assicurerà di essere raggiungibili ovunque e dipoter avere infine le nostre due porte locali collegate a quelle del server che ci interessano.La soluzione appena vista funziona, ma non è sicuramente il massimo per almeno due motivi: 1) il server avrà un processo che si attiva costantemente tentando di connettersi al nostro computer 2) i nostri dati sono proprio in bella vista.Come ovviare a questo?Un modo è probabile che ci sia e passa attraverso le porte che generalmente il firewall tiene aperte iningresso, come la porta 80 (destinata al server HTTP). Oltre ad avere sul server tale porta aperta per leconnessioni in ingresso (spesso è così, se no apritela), è necessario avere un webserver (es. Apache, maqualunque altro va bene) che ascolta su di essa e che supporti PHP. Non sto qui a raccontarvi come siinstallano Apache e PHP, trovate centinaia di guide su Internet (se volete una soluzione veloce, all-in-one e multipiattaforma provate XAMPP, scaricabile dal sito www.xampp.org).Comunque è fondamentale che dal client, ovunque ci troviamo, inserendo nel browser lindirizzo delserver, compaia la pagina del webserver. Se è così possiamo andare avanti.Lidea è quella di utilizzare un semplice form HTML per inserire nome utente e password, questiverranno sottomessi ad un file PHP che si occuperà di richiamare lo script precedente modificato peraccettare nome utente e password dallesterno. In questo modo risolveremo il problema 1), in quantonon avremo più bisogno del processo che si attiva costantemente per provare a connettersi al nostrocomputer, ma lo richiameremo quando ne avremo bisogno dalla barra indirizzi del browser;risolveremo anche il problema 2), perchè passeremo i nostri dati attraverso il form, quindi non sarannosalvati sul server e visibili a terzi.Creiamo una sottocartella chiamata “test” nella cartella dove vanno i file di Apache accessibilidallesterno (di solito /var/www o /opt/lampp/htdocs) e posizioniamoci in essa.Creiamo in essa un file test.htm che mostri un semplice form per linserimento di username e password,il suo contenuto potrebbe essere questo:<!doctype html public "-//w3c//dtd html 4.0 transitional//en"><html><head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Mozilla/4.76 [en] (X11; U; Linux 2.2.16-22 i686) [Netscape]"> <title>Login page</title></head><center> <font size="+3" face="Verdana, Arial, Helvetica, sans-serif"><strong>Login page</strong></font></center><p><form action="test.php" method="post" name="form" target="_blank"><center><table border="1"><tr><td><b>Username</b></td><td><input name="username" type="text" size="40" /></td></tr><tr><td><b>Password</b></td><td><input name="password" type="password" size="40" /></td></tr> 30
  • <tr><td ALIGN=RIGHT>&nbsp;</td><td ALIGN=center><b><input type="submit" value="Login"> <input type="reset" value="Reset"></b></td></tr></table></center></form></body></html>Esso passerà i dati inseriti ad un file test.php, che creeremo nella stessa cartella con il seguentecontenuto:<?php $username=$_POST["username"]; $password=$_POST["password"]; $comando="./test.exp $username $password"; $res=exec($comando);?>Questo file andrà a chiamare il nostro script test.exp, che copieremo in questa cartella e chemodificheremo in modo che il suo contenuto sia il seguente:#!/usr/bin/expectset username [lrange $argv 0 0]set password [lrange $argv 1 1]spawn ssh -N -f -R 5555:192.168.0.1:22 -R 5910:192.168.0.1:5900 pippo@pippo.dyndns.orgexpect "*(yes/no)?"send "yesr"expect "*assword:"send "$passwordr"send -- "r"expect eof(ovviamente sostituiamo nello script gli indirizzi corretti).Modifichiamo i permessi di test.exp mediante i comandisudo chown nobody:nogroup test.expsudo chmod og-x test.expsudo chmod u+x test.expIn questo modo avremo fatto sì che il file sia scrivibile ed eseguibile solo da web (oltre che da rootovviamente).Per richiamare il tutto scriviamo nella barra degli indirizzi del browserhttp://server_address/test/test.htm(sostituiamo a server_address lindirizzo del server).Avremo davanti una pagina simile alla seguente: 31
  • Qui inseriremo username e password, che verranno inviati al file test.php, che si occuperà di richiamaretest.exp passandoli ad esso come argomenti. Così avremo la nostra connessione.Unica raccomandazione, ma fondamentale: qualcuno potrebbe pensare che oltre a username epassword dal form HTML potremmo passare anche il nostro indirizzo IP attuale, evitando così di usareDynDNS o no-IP, ma sarebbe un gravissimo errore, in quanto chiunque sapesse dello script potrebbeusarlo per usare la nostra tecnica a proprio piacimento sul proprio PC, assicurandosi una via di accessoal server; per evitare ci accontenteremo di passare solo username e password e lasciare lhostname nelloscript, così continueremo a usare DynDNS o no-IP, ma in questo modo solo noi (e nessun altro)potremo connetterci.Nota bene: se il nostro client non è connesso direttamente ad Internet ma è dietro un router, lIP con ilquale saremo su Internet è quello del router (anche DynDNS e no-IP connetteranno lhostname a questoindirizzo), dunque è necessario aprire la porta 22 (SSH) in ingresso sul router ed effettuare il portforwarding di tale porta sul nostro client.Per terminare la connessione, basta lanciare dalla console del nostro client il comandops -ax | grep sshIl risultato sarà simile al seguente:4926 ? Ss 0:00 /usr/sbin/sshd6537 ? Ss 0:00 sshd: l3golas [priv]6544 ? S 0:00 sshd: l3golas6579 pts/1 R+ 0:00 grep ssh 32
  • Basta uccidere il processo che termina con [priv], che nel nostro caso ha PID 6537, quindi tramite ilcomandosudo kill 6537 33