Scenari di accesso a server Linux attivi in Microsoft Azure

Gestione degli ambienti grafici in Console

Normalmente nell’utilizzo di server on-premise si ha accesso alla console di sistema ed è quindi possibile il pieno controllo utilizzando anche la console grafica. In Azure non disponendo di una console vera propria l’accesso al desktop del sistema operativo è meno agevole.

In questo scenario l’utilizzo di sistemi Linux piuttosto che Windows presenta ulteriori differenze.

In Windows è possibile l’accesso in console grafica tramite RDP, e con l’opzione /console ottenere la condivisione della sessione 0.

In Linux è meno agevole eseguire applicazioni grafiche su host attivi in Cloud, ma con pochi semplici accorgimenti è possibile ridirigere la console del server su una postazione on premise da cui effettuare la gestione.

Il tutto si basa su X Windows , l’ambiente grafico disponibile su (quasi) tutti i sistemi Linux, e sul re-indirizzamento dell’interfaccia a partire da una sessione terminale SSH all’interno della quale transiterà tutto il traffico.

Condizione essenziale affinché sia possibile eseguire remotamente applicazioni è che la postazione dove queste vengono visualizzate abbia un server X installato. Se si accede da una postazione Linux questa funzionalità è attiva di default (a meno che non si scelgano installazioni minimal).

In Windows dovremo installare un server X Windows, ossia una sorta di emulatore in grado di visualizzare localmente le applicazioni eseguite sul sistema in Cloud.

Configurazioni sul server Linux in Azure

Per abilitare la funzione di Forwarding dell’interfaccia X11 all’interno di SSH, in modo che l’applicazione eseguita remotamente venga visualizzata sulla postazione di gestione, è necessario modificare il file sshd_config presente in /etc/ssh/ a
All’interno del file sono presenti la varie impostazioni relative all’ambiente grafico, in questo caso ci soffermiamo sulla riga #ForwardX11 no

Individuata questa impostazione dovremo rimuovere il # ad inizio riga e modificare il valore NO ( di default) portandolo a YES.

A questo punto sarà sufficiente attivare una sessione SSH con l’opzione -X verso il server. all’interno di una sessione terminale eseguita dall’ambiente grafico della postazione di gestione.

ssh -X utente@ip-server

Figura1

Eseguito il comando si aprirà una sessione terminale verso il server Linux e sarà possibile visualizzare localmente un’applicazione grafica eseguita sul server in cloud.

Figura2: Browser Firefox eseguito su server Linux in Cloud ma visualizzato su postazione locale

Apparentemente questa modalità operativa non è di grande aiuto in quanto normalmente tramite l’interfaccia a caratteri è possibile effettuare la completa gestione di un sistema Linux, ma ad esempio, in installazioni dove è necessario avviare un browser locale al server per eseguire attività di configurazione, questo modo di operare risulta l’unico possibile, se non consideriamo la possibilità di installare VNC nella versione per Linux o altri software analoghi, ma implicano ulteriori attenzioni in termini di sicurezza.

Considerazioni relative all’ambiente Windows

Quanto visto fin qui è applicabile se la postazione da cui si esegue il management è anch’essa Linux, nel caso in cui la connessione avvenga da una postazione Windows dovremo installare su quest’ultima un server X-Windows in grado di dialogare con il sistema operativo in Cloud, esistono vari software anche a pagamento, in questo scenario abbiamo utilizzato XMing disponibile sul sito ufficiale, dopo aver fatto una modesta “donazione”, ma scaricabile anche da Sourceforge gratuitamente nella versione precedente. (unica nota è che ad oggi la versione “libera” non è ancora dichiarata compatibile con Windows 10)

Per poter eseguire, come nell’esempio visto prima, un’applicazione grafica, dobbiamo anche da Windows accedere con una sessione SSH sul server Linux, a questo scopo è possibile utilizzare PUTTY configurando la sezione relativa alla redirezione X11

Dopo aver definito il nome/indirizzo Host, nella configurazione SSH è sufficiente attivare il flag relativo alla funzione di X11 Forwarding, e dopo aver aperto la sessione terminale eseguire l’applicazione voluta

Figura 5 Browser Firefox eseguito su server Linux in Cloud ma visualizzato su postazione locale Windows

Lo scenario considerato è basato su una distribuzione Centos, come ho avuto modo di dire in articoli precedenti, trattandosi di sistemi Linux, ed essendo questo sistema operativo molto differente nelle varie distribuzioni, anche presenti in Azure, è possibile che ci siano alcune differenze di implementazione, è sempre consigliabile utilizzare MAN al fine di ottenere le informazioni puntuali sulla distribuzione in uso.

In breve queste sono le possibilità offerte per ottenere un accesso ad applicazioni grafiche che per ragioni differenti devono essere eseguite su un server Linux attivo in Azure. Come si è visto, il perno di tutta la funzione di redirezione del “desktop”, al di là del server X-Windows è SSH che in questo caso opera come un vero e proprio Tunnel, questa funzione è utilizzabile anche per effettuare l’accesso servizi che per motivi più diversi non sono esposti pubblicamente ma soltanto accessibili localmente, magari attraverso l’interfaccia di Loopback.

Utilizzo di SSH tunnel per accesso a PhpMyadmin su Azure VM LAMP

Le scelte disponibili dalla gallery di Azure comprendono numerose possibilità in ambito Open Source tra queste, per gli utilizzatori degli ambienti LAMP, (Linux Apache MySQL PhpMyadmin) sono disponibili ad oggi, una serie di immagini già preconfigurate. Alcune a pagamento, altre gratuitamente.

Utilizzando dalla gallery “l’immagine” Lamp fornita da Bitnami con pochi click possiamo installare un ambiente completo con le tre componenti configurate e funzionanti.

Una peculiarità di questa installazione è quella di avere l’accesso al servizio di PhpMyadmin accessibile esclusivamente dal localhost. Questa scelta è dettata esclusivamente da ragioni di sicurezza, in quanto è preferibile mantenere protetta la gestione di MySQL non esponendo il servizio sull’ip pubblico del server.

E’ possibile una gestione completa da riga di comando, ma le varie operazioni di configurazione non sono semplici, in uno scenario di questo tipo, l’accesso alla gestione è ragionevole che avvenga per mezzo del browser.

Consideriamo anche che in un ambiente Cloud-Based risulta difficile attivare una console grafica da cui eseguire un browser direttamente sul server linux e per contro, risulta sconveniente modificare la configurazione in modo da consentire un accesso “pubblico” al servizio.

Il sistema operativo Ubuntu, Bitnami usa questa distro per il deploy del server LAMP, è accessibile in SSH tramite un normale emulatore terminale.

Con SSH, come abbiamo visto in precedenza, è possibile definire un Tunnel in modo da incanalare il traffico verso porte normalmente bloccate utilizzando una sorta di redirezione. In questo modo è possibile accedere al servizio PhpMyadmin in ascolto sulla porta 80 LOCALHOST del server Lamp anche da postazioni esterne. Si evita così di dover utilizzare, come in questo caso, un browser sul server stesso.

Funzionamento del Tunnel SSH

Lo schema e le relazioni in gioco nei vari componenti è il seguente:

Figura 6

In pratica l’emulatore SSH opportunamente configurato “apre” una porta tcp (in questo caso 7654) in ascolto sull’host locale (il pc di gestione) e ridirige il traffico verso l’endpoint su cui ha effettuato la connessione, in questo modo tutto il traffico transita verso l’host attraversando il Tunnel cifrato reso disponibile da SSH.

Nello scenario descritto in questo documento il tunnel viene utilizzato per l’accesso al servizio Web Apache dell’amministrazione di MySQL, ma questa implementazione in generale è valida per tutti i servizi che per ragioni differenti si vogliono mascherare o non sono accessibili dall’ip pubblico dei server in Azure non necessariamente di questa sola immagine.

Se consideriamo la postazione remota con sistema operativo Windows possiamo utilizzare Putty come emulatore terminale SSH, la configurazione è semplice ed attivabile con pochi passaggi

Per prima cosa è necessario definire una connessione verso l’host dove è presente LAMP

Figura 7 Configurazione Putty

Successivamente selezionare nel ramo “connection” la voce SSH e poi ancora Tunnels (1)

Figura8 definizione delle opzioni per il Tunnel SSH

Nei campi a destra “Source Port” (2) e “Destination” (3) dovremo inserire rispettivamente la porta che verrà aperta sul pc locale, l’indirizzo del server in Cloud e la porta che ospita il servizio a cui vogliamo accedere, in questo caso trattandosi di PhpMyadmin in ascolto su porta 80 in Localhost imposteremo questo valore.

Nel caso si volesse, tramite questa connessione SSH in Tunnel, accedere ad un altro host sulla rete in Azure, sarà sufficiente digitarne l’ip o il nome fqdn. In questo caso il server su cui è attiva la connessione opererà come una sorta di gateway verso l’host desiderato.

La possibilità offerta dall’impostazione al punto (4) permette, al client locale su cui Putty è attivo, di operare come gateway, analogamente a quanto detto per il punto 3, ma dal lato della rete on-Premise in questo modo le varie postazioni potranno “puntare” all’indirizzo Ip/Porta della postazione ed accederanno al medesimo servizio su Azure.

Figura 9 apertura del socket sulla porta configurata

Utilizzando un browser dal lato client è sufficiente riferirsi all’indirizzo localhost in porta 7654 per accedere.

Figura 10

Questa configurazione è possibile tramite Putty su sistemi Windows ma se on premise disponessimo di un host con sistema operativo Linux sarà sufficiente eseguire SSH da riga di comando con i parametri corretti.

Figura 11 SSH Tunnel in Linux

La sintassi del comando in Linux è la seguente:

ssh -N -L:<porta-locale>:127.0.0.1:<porta-remota> utente@host-remoto

NOTA BENE se il comando, richiesta la password di autenticazione, non ritorna errori ma resta con il cursore lampeggiante senza ritornare al prompt comandi il funzionamento è regolare.

Per verificare la correttezza della configurazione è sufficiente anche in questo caso aprire la pagina di PhpMyadmin

Figura 12 accesso a PhpMyadmin

Per questa configurazione è stato utilizzato Putty come applicazione Client in Windows, ma normalmente i vari emulatori SSH prevedono la funzionalità di Tunneling. L’emulatore PUTTY è liberamente utilizzabile, leggero e non richiede installazione, in commercio esistono vere e proprie applicazioni che oltre ad essere emulatori hanno in sé anche la componente di X-Windows server.

Tra tutti quelli disponibili Mobaxterm ha la possibilità di un uso libero fino a otto sessioni verso diversi Host

Riferimenti:

Mobaxterm guida alla configurazione di un tunnel ssh

Putty download