Piattaforma SSHCode per esercitazioni ed esami
by Tullio Facchinetti
La piattaforma SSHCode fornisce uno spazio di lavoro per lo svolgimento di tutorati ed esami.
Il nuovo servizio SSHCode è basato su una connessione con protocollo SSH (Secure SHell) ed un terminale configurato per lo svolgimento di tutorati ed esami in linguaggio C.
SSH è un protocollo che permette di collegarsi in modo sicuro ad una macchina connessa ad Internet (detta macchina remota). In pratica digitando sul proprio computer, si possono eseguire comandi come se si stesse operando sull’elaboratore in remoto.
Per questo motivo è uno strumento utilizzatissimo da chiunque abbia la necessità di operare su macchine/computer/server che non siano fisicamente accessibili. Per esempio, la pressochè totalità dei server web vengono amministrati tramite SSH. Questa precisazione è utile per chiarire che SSH è uno strumento che potrebbe rivelarsi utile, e spesso indispensabile, a chiunque si troverà a lavorare in campo informatico anche in futuro.
Client SSH
Per collegarsi ad una macchina remota tramite il protocollo SSH bisogna usare un client SSH e fornirgli i necessari parametri di collegamento. Un client SSH può essere cosiderato come il browser, ma invece di visualizzare una pagina web, stabilisce una connessione all’interno della quale interagire tramite terminale.
Esistono molti client SSH, utilizzabili in vari contesti e per diversi sistemi operativi. Consiglio i seguenti, che sono parecchio utilizzati e quindi particolarmente affidabili:
- Se si utilizza Windows o Linux: PuTTY
- Se si utilizza MacOS conviene utilizzare una estensione per il browser Google Chrome (che si può comunque usare anche con Windows o Linux); va quindi usato Chrome, e l’estensione è Secure Shell App, che può essere installata in Chrome come qualsiasi altra estensione
- Se si utilizza Linux, il comando
ssh
da linea di comando è solitamente già installato nella distribuzione
È possibile scegliere il client preferito in base al proprio sistema operativo e, in caso di più opzioni (sistemi Linux o Windows), alle proprie preferenze.
Parametri per il collegamento
Per effettuare il collegamento, un client SSH richiede i seguenti parametri:
- nome del server (o hostname)
- porta
- nome utente (o username)
- password
Questi parametri sono/saranno inviati via email a ciascuno studente e sono da considerarsi strettamente personali.
Solitamente i parametri sono inviati all’inizio dell’anno accademico in vista dello svolgimento di esercitazioni e tutorati. In vista di un esame, i parametri vengono inviati (o re-inviati) a tutti gli iscritti all’esame al momento della chiusura delle iscrizioni.
Se non si è in possesso delle credenziali e si desidera prendere confidenza con l’ambiente di programmazione in vista di un esame, seguire queste istruzioni.
I parametri di collegamento sono tutti molto semplici da configurare nel client prescelto. Tutti i client indicati, infatti, presentano nella prima schermata i campi da riempire con questi dati.
Se ci si collega per la prima volta, il client potrebbe chiedere di inserire la parola yes
di conferma prima di procedere a chiedere la passord.
Restrizioni nel collegamento
La piattaforma SSHCode è utilizzabile collegandosi da qualsiasi client connesso a reti che permettono una connessione SSH.
Queste includono le connessioni Internet della propria abitazione e, normalmente, l’hotstop realizzato con lo smartphone. Inoltre, ci si può collegare dall’interno delle aule informatiche dell’Università.
Non è invece possibile collegarsi tramite la rete WiFi nè la rete Eduroam dell’Università di Pavia, che filtrano (ovvero, non permettono) il traffico SSH.
Collegamento con PuTTY
Ecco per esempio la schermata di PuTTY:
In PuTTY è possibile anche salvare e caricare dei preset, in modo da evitare di dover re-inserire ogni volta i dati per la connessione.
Collegamento con l’estensione di Chrome
La schermata di Secure Shell App per Chrome è la seguente:
Collegamento da terminale col comando ssh
Il programma ssh
da linea di comando si può invece invocare in questo modo:
ssh -p porta username@hostname
Collegamento da terminale col comando mosh
La connessione ad SSHCode può essere fatta da terminale anche utilizzando il programma Mosh. Mosh funziona come ssh, ma ha alcune funzionalità che lo rendono più robusto, soprattutto in caso di connessioni di rete non ottimali (es., scarsa copertura WiFi o 3G/4G).
Il comando per il collegamento tramite Mosh è il seguente:
mosh username@hostname --ssh="ssh -p porta"
ATTENZIONE: durante l’esame in aula viene usato Mosh, quindi potrebbe essere conveniente provarlo anche da casa.
Mosh non è normalmente installato nemmeno nei sistemi Linux. Bisogna quindi procedere con l’installazione come spiegato nella pagina del programma.
Inserimento della password
La password, e nel caso di PuTTY anche lo username, vanno invece inseriti una volta avviata la connessione.
ATTENZIONE: per ragioni di sicurezza, durante l’inserimento della password i caratteri digitati non vengono visualizzati (anche se alcuni client permettono di visualizzarli).
Ambiente di programmazione
Per accedere all’ambiente di programmazione, digitare
fdi start
L’interfaccia dispone di diverse finestre tra le quali ci si può spostare a rotazione nelle due direzioni con i tasti F7
e Shift-F7
.
Tutte le finestre sono delle “viste” dello stesso ambiente, nel senso che la directory di lavoro è la stessa e tutti i comandi da tutte le finestre svolgono le stesse operazioni.
Normalmente si può usare una finestra per scrivere il programma e un’altra per la compilazione. Durante l’esame ci sono finestre addizionali con il testo dell’esame e una finestra di aiuto.
Per uscire dall’ambiente di programmazione, digitare
fdi stop
e poi
exit
L’ambiente di programmazione è unicamente basato su shell Linux. Dopo l’accesso, si ha appunto a disposizione una shell nella quale impartire i comandi.
Esplorazione del file system
Si possoono utilizzare i noti comandi per elencare i file presenti in una directory (ls
), per creare directory (mkdir
), per spostarsi tra le directory (cd
), ecc.
File browser nnn
Il filesystem può anche essere esplorato con un comodo programma chiamato nnn
.
Prova a digitare il comando, e usa i tasti freccia per navigare nel filesystem.
Per uscire da nnn
digita q
(sta per “quit”, ed è un tasto usato spesso per uscire dai programmi interattivi per terminale).
Maggiori informazioni sulle funzionalità di nnn
sono presenti sul sito web del programma.
Editor di testo
Per visualizzare ed modificare i file di testo, come i programmi .c
, sono disponibili vari editor, tra cui vim
, nano
, micro
.
Quello consigliato, perché più semplice da usare, è micro
.
Per aprire per esempio un file chiamato tutorato.c
basta digitare:
micro tutorato.c
La seguente figura mostra un esempio dell’interfaccia che si ottiene lanciando fdi start
, dopo aver aperto un file con l’editor micro
.
Per uscire dall’editor digitare Ctrl-Q
(tasto control
insieme a Q
).
L’editor mette a disposizione i tipici comandi per il copia/taglia/incolla (Ctrl-C
, Ctrl-X
e Ctrl-V
rispettivamente), l’undo (Ctrl-Z
), e l’uso del mouse.
Con Ctrl-G
è possibile visualizzare la guida dell’editor, e con Alt-G
le associazioni dei tasti.
Visualizzazione degli errori di compilazione
Quando è aperto un file con estensione .c
, micro
riconosce automaticamente che si tratta di un programma C.
Viene quindi attivato il cosiddetto syntax highlighting, che evidenzia con colori diversi i vari elementi del programma (parole chiave, stringhe, variabili, ecc.).
Quando si salva il file corrente con Ctrl-S
, micro
visualizza i caratteri >>
accanto alle righe nelle quali il compilatore segnala un warning o un errore.
Portando il cursore in una riga contrassegnata con i caratteri >>
, viene visualizzato il testo del messaggio del compilatore nella barra di stato di micro
, in basso nella finestra dell’editor.
Questa funzionalità è particolarmente comoda durante lo sviluppo del programma, in quanto permette di sapere se il programma è corretto semplicemente salvandolo su disco, senza compilarlo esplicitamente.
Selezione dello schema di colori in micro
La combinazione di colori usata da micro
, soprattutto quando è attivo il syntax highlighting durante la scrittura di un programma, può non essere ottimale, in quanto dipende anche dal colore dello sfondo, dal client SSH utilizzato, ecc.
Per adattare la combinazione di colori alle proprie esigenze, bisogna accedere alla barra dei comandi di micro
digitando Ctrl-E
all’interno del programma.
Successivamente, digitare il seguente comando:
set colorscheme schema
dove schema
è il nome dello schema di colori desiderato (es., simple
, monokai
, darcula
, ecc.).
Dal momento che non esiste una lista completa di tutti gli schemi di colore disponibili, è possibile usare l’autocompletamento di micro
per “esplorare” le varie possibilità, procedendo come segue.
Digitare Ctrl-E
, e al prompt digitare soltanto:
set colorscheme
E’ importante che dopo colorscheme
si digiti anche uno spazio, come se si volesse inserire successivamente il nome dello schema.
A questo punto, premendo il tasto TAB
, micro
elencherà i suggerimenti per completare il comando, che corrispondono ai nomi degli schemi di colori disponibili.
Premendo nuovamente TAB
si selezionerà il nome successivo, mentre Shift-TAB
selezionerà il nome precedente.
Il tasto TAB
(e la combinazione Shift-TAB
) può essere premuto tante volte quante sono necessarie per selezionare il nome desiderato.
Premere poi INVIO
per selezionare lo schema corrente.
Consiglio di provare vari schemi di colori per selezionare quello più adatto al proprio setup.
ATTENZIONE: per valutare uno schema di colori conviene aver aperto nell’editor un file .c
con un po’ di istruzioni, in modo da poter verificare quali colori vengono utilizzati per i vari elementi del testo.
Infatti, se nell’editor non è presente del testo, l’effetto di un diverso schema di colori è difficile da valutare.
Quando si esce da micro
, l’impostazione dello schema di colori viene automaticamente salvata e verrà utilizzata alla successiva apertura del programma.
Informazioni utili
Ingrandimento della finestra attiva
Molti client mettono a disposizione una dimensione limitata del terminale (numero di righe x colonne). Pertanto la suddivisione dello schermo generata dal comando fdi start
può portare a finestre troppo piccole per poter lavorare agevolmente.
Per ovviare a questo inconveniente è possibile zoomare la finestra attiva.
Con la combinazione di tasti Ctrl-b z
(tenere premuti il tasto Ctrl
e b
insieme, poi lasciare, e premere z
) si effettua lo zoom della finestra attiva, che assunme l’intera dimensione della finestra del client. In questo modo lo spazio a disposizione per lavorare diventa molto maggiore. Per tornare alla situazione precedente, premere nuovamente Ctrl-b z
. Lo zoom si può effettuare in qualsiasi finestra.
ATTENZIONE: lo zoom funziona correttamente su sistemi Windows e Linux. Attualmente non sembra essere garantito il funzionamento su sistemi Mac.
Scorrimento del risultato della compilazione
Talvolta il risultato della compilazione è troppo lungo per poter essere consultato comodamente.
Per compilare programma.c
e poter scorrere l’output generato da gcc
in caso di molti warning e errori, usare il comando:
gcc -Wall programma.c 2>&1 | less
Sarà possibile scorrere l’output di gcc
con le frecce su e giù. Per tornare al prompt digitare q
(quit).
Attenzione che se l’output del compilatore è assente viene visualizzata una schermata vuota. Digitare q
per uscire.
Copia e incolla
Il copia e incolla da dentro a fuori della sessione SSH può essere un problema e la soluzione dipende da quale client si utilizza e dal sistema operativo.
Nel caso si utilizzi la Secure Shell App, possono essere utili queste informazioni.
Trasferimento di file
La piattaforma SSHCode permette il trasferimento di file da e verso il proprio computer tramite un client SFTP (Secure FTP) collegandosi con le stesse credenziali usate per accedere al servizio ma utilizzando la porta 22003.
Un client semplice da usare e disponibile per tutte le piattaforme è FileZilla.
I parametri di configurazione vanno impostati come in figura:
Configurazione dell’ambiente
L’ambiente di sviluppo accessibile tramite il comando fdi
permette la configurazione di alcuni aspetti, come i colori, i tasti per spostarsi da una finestra all’altra, e alcuni altri.
Le informazioni per configurare l’ambiente possono essere consultate in questa pagina.
Concetti avanzati: tmux
Per chi ama approfondire la conoscenza delle tecnologie utilizzate nell’ambiente di programmazione, viene utilizzato tmux. Si tratta di un cosiddetto “terminal multiplexer”, ovvero un programma che permette di ottenere diversi terminali in una singola sessione di shell (SSH nel nostro caso).
Il comando fdi start/stop
non fa altro che richiamare tmux
.
Pertanto un utente avanzato può pensare di utilizzare direttamente le funzionalità di tmux
.
Esistono numerosi tutorial online per l’uso di tmux
.
Un utile riferimento alle combinazioni di tasti che possono essere usate con tmux
è disponibile su tmuxcheatsheet.