Piattaforma SSHCode per esercitazioni ed esami

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:

È 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:

Questi parametri sono/saranno inviati via email a ciascuno studente e sono da considerare 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 dei propri parametri 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.

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.

La schermata di Secure Shell App per Chrome è la seguente:

Il programma ssh da linea di comando si può invece invocare in questo modo:

ssh -p porta username@hostname

La password, e nel caso di PuTTY anche lo username, vanno invece inseriti una volta avviata la connessione.

ATTENZIONE: durante l’inserimento della password i caratteri digitati non vengono visualizzati per ragioni di sicurezza.

L’ambiente di programmazione

L’ambiente di programmazione è unicamente basato su shell Linux. Dopo l’accesso, si ha appunto a disposizione una shell nella quale impartire i comandi.

Si potranno quindi utilizzare i noti comandi per elencare i file presenti in una directory (ls), per creare directory (mkdir), per spostarsi tra le directory (cd), ecc.

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).

Uno screenshot di nnn è il seguente:

Maggiori informazioni sulle funzionalità di nnn sono presenti sul sito web del programma.

Per avere a disposizione due shell, una per la programmazione e l’altra per la compilazione, eseguire il comando:

fdi start

Per visualizzare ed editare 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 editare per esempio il file 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.

IMPORTANTE: 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 oeprazioni.

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.

Per uscire dall’ambiente di programmazione, digitare

fdi stop

e poi

exit

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:

filezilla

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.