Guida ad SSH – Parte #1

1/09/2018

Secure Shell, o meglio, SSH: avrete sicuramente sentito pronunciare da un informatico almeno una volta, questo termine. Di cosa si tratta?

Cos’è Secure Shell/SSH?

SSH è un protocollo utilizzato per accedere da remoto ad un computer tramite l’interfaccia a riga di comando. In parole povere, una connessione SSH è costituita da un computer server (ossia quello che ospita la possibilità di accedere da remoto) e i computer client, che tramite un apposito software possono accedervi.

La caratteristica più interessante che ha reso questo protocollo uno dei più utilizzati al mondo, è che le comunicazioni tra server e client sono completamente cifrate.

SSH ovviamente funziona all’interno di una rete locale, utile se per esempio dobbiamo controllare più PC in contemporanea in un ambiente casalingo, un Raspberry al quale non abbiamo collegato un monitor, ecc, ma funziona anche per l’accesso da IP esterno. Su questo sarà importante anche aprire le porte del router al fine di permettere l’accesso tramite IP, e naturalmente se abbiamo più PC di selezionare una porta diversa per ciascuno.

Dunque, dopo questa introduzione generale sul protocollo SSH, passiamo alla pratica, e vediamo come si installa un server SSH.

Ovviamente la compatibilità con questo protocollo è totale con tutti i sistemi operativi moderni: la configurazione con i sistemi tipo Unix come GNU/Linux e macOS è quasi out of the box, bisogna solo abilitare qualcosina, Microsoft con gli ultimi update di Windows 10 ha fatto notevoli passi da gigante ed è altrettanto immediato configurare SSH. Vedremo ora le procedure per Windows 10, Ubuntu, Arch Linux, Fedora e macOS.

Installare il server SSH su Windows 10 (1803+)

Sull’ultima versione del sistema di Microsoft niente di più semplice. Innanzitutto assicuriamoci di avere sempre l’ultimo aggiornamento disponibile, dopodichè basta recarsi in Impostazioni > App e funzionalità > Gestisci funzionalità facoltative > Aggiungi una funzionalità  e installare il pacchetto Server OpenSSH. Dopodichè riavviare Windows per completare l’installazione.

Dopo aver riavviato Windows, cerchiamo da Start l’applicativo Servizi ed avviamolo. Cerchiamo il servizio OpenSSH Server e una volta trovato apriamone le proprietà dal tasto destro, quindi impostiamo l’avvio del servizio su Automatico. Infine qualora non fosse già in esecuzione, avviamolo, e poi clicchiamo su OK per applicare le modifiche.

Installare SSH su Ubuntu

Su Ubuntu niente di più semplice, basta installare da apt il pacchetto openssh-server.

Installare SSH su Arch Linux

Su Arch Linux in genere server ssh è già installato, eventualmente basta installare da pacman il pacchetto openssh, l’unica cosa che dobbiamo fare è scegliere gli utenti o i gruppi da autorizzare per l’accesso. Assicurandoci di avere i permessi di root, dobbiamo semplicemente andare a modificare il file /etc/ssh/sshd_config, aggiungendo al file la stringa “AllowUsers nomeutenteautorizzato”. Infine abilitiamo il servizio all’avvio con “systemctl enable sshd” e ricarichiamolo con “systemctl reload sshd”. Se in quest’ultimo caso dovesse restituirvi un errore systemd in cui dice che il servizio non è in esecuzione, basta avviarlo con “systemctl start sshd”.

Installare SSH su Fedora

Anche su Fedora SSH dovrebbe già essere installato, eventualmente basta installare da dnf il pacchetto openssh. Dopodiche, proprio come su Arch, andare nel file di configurazione /etc/ssh/sshd_config e scegliere gli utenti da autorizzare. Infine abilitiamo il servizio all’avvio con “systemctl enable sshd” e ricarichiamolo con “systemctl reload sshd”. Se in quest’ultimo caso dovesse restituirvi un errore systemd in cui dice che il servizio non è in esecuzione, basta avviarlo con “sudo systemctl start sshd”.

Per chi usa il firewall su GNU/Linux

Piccola nota per quanto concerne GNU/Linux, in genere non dovrebbero essere imposte restrizioni alla porta 22, ossia quella usata di default da SSH, ma qualora aveste il firewall attivo questa potrebbe essere bloccata, per cui vi consiglio di digitare con i permessi di root: ufw allow ssh/tcp. In questo modo le comunicazioni attraverso la porta 22 saranno sbloccate. Qualora si dovesse decidere di usare una porta diversa dalla 22, bisognerà aprirla sempre con: ufw allow numeroporta/tcp.

Installare SSH su macOS

Mentre per quanto concerne macOS, basta andare in Preferenze di Sistema > Condivisione e abilitare la voce “Accesso remoto”. Stop, non dobbiamo fare altro.

Configurare SSH

Prima di vedere come avviare una sessione SSH, andiamo a modificare il file di configurazione, che su Linux e macOS si trova in /etc/ssh/sshd_config, mentre su Windows si trova in C:\ProgramData\ssh\sshd_config

Vediamo quindi com’è possibile personalizzare le preferenze del server SSH, queste sono le voci più importanti che possiamo trovare dentro il file di configurazione:

Port: ci consente di cambiare la porta che deve reindirizzare al server SSH al momento della connessione da remoto.

ListenAddress: ci consente di specificare per quali indirizzi IP il server deve autorizzare all’accesso SSH. Il parametro ListenAddress può infatti essere specificato più volte con i relativi IP da autorizzare.

PermitRootLogin: consente di abilitare o meno la possibilità di accedere da remoto con l’utente root. Naturalmente per ragioni di sicurezza l’opzione è disattivata, cambiando il parametro a yes, a discapito della sicurezza, sarà possibile accedere da root.

HostKey: indica il percorso dov’è memorizzata la fingerprint del server.

LoginGraceTime: indica il tempo in secondi per cui il server deve rimanere in attesa di login, per poi disconnettersi nel caso in cui la sessione non fosse stata avviata con successo.

PasswordAuthentication: permette di abilitare o meno l’autenticazione con password. Inutile dirvi che questa opzione deve rimanere sempre su YES.

X11Forwarding: questa opzione consentirà di abilitare la possibilità di eseguire applicazioni grafiche durante una sessione SSH. Vedremo tra poco come funziona.

AllowUsers: permette di scegliere quali utenti abilitare al login. Quest’opzione è stata utilizzata in precedenza per consentire l’accesso al nostro utente.

AllowTcpForwarding: consente di attivare il tunnelling SSH, un sistema per indirizzare del traffico TCP da una porta locale verso una porta di un server remoto o viceversa.

Attivando contestualmente l’opzione GatewayPorts, le porte che normalmente sarebbero accessibili solamente da locale sulla macchina interessata durante un tunnel, vengono rese accessibili anche dall’indirizzo IP di rete della macchina o dall’indirizzo IP esterno per l’accesso pubblico. Prossimamente vedremo come effettuare il tunnelling con SSH, sia remoto che locale.

Dopo ogni modifica, su Linux bisogna riavviare il servizio con “systemctl reload sshd”, su Windows va riavviato il servizio dalla schermata dei Servizi vista in precedenza, mentre su macOS bisogna utilizzare il comando “launchctl stop com.openssh.sshd” e poi “launchctl start com.openssh.sshd”, con i permessi di root.

A questo punto vediamo come accedere al server configurato da remoto tramite un client SSH. Il procedimento è identico per tutte e tre le piattaforme: su Windows, qualora non fosse già installato, bisogna installare dalle funzionalità aggiuntive il pacchetto “Client OpenSSH” per avere accesso ai comandi utilizzabili tramite PowerShell o CMD, mentre per Linux e Mac il client è preinstallato.

In questa prima fase vedremo come funzionerà SSH tra i computer presenti all’interno della stessa rete locale, successivamente vedremo il funzionamento anche con l’accesso da IP esterno.

Dunque, per avviare una sessione SSH è sufficiente digitare su una console a riga di comando: ssh nomeutenteabilitato@indirizzoip. Quando la connessione con un server specifico avviene per la prima volta, ci verrà chiesto se vogliamo salvare in memoria la fingerprint del server, ossia una chiave identificativa generata appositamente, per cui dando il “Si” questo avviso non ci apparirà più. Questa è una misura di sicurezza applicata per prevenire connessioni indesiderate con host insicuri. Dopodichè dobbiamo la relativa password e una volta fatto ciò siamo dentro il server. Se si utilizza una porta diversa dalla 22, bisognerà aggiungere l’opzione -p portaserver.

I comandi utilizzabili dentro una sessione SSH sono quelli inerenti alla piattaforma ospitata dal server, in questo caso dall’altra parte si sta utilizzando un server con sistema operativo Linux, quindi è una semplicissima shell bash. Per esempio, per creare una cartella dentro il server possiamo usare: “mkdir nomecartella”. Per effettuare spostamenti dentro lo stesso server si usa il comando mv, per copiare il comando cp, ecc.

Naturalmente nel caso dei sistemi Unix per eseguire alcune operazioni è necessario elevarsi a root.

Tramite Secure Shell è inoltre possibile il trasferimento di file in modo davvero semplice. Non dobbiamo far altro che utilizzare la seguente sintassi: scp nomefile nomeutente@indirizzoip:percorso, il comando è bidirezonale.

Naturalmente la velocità di trasferimento varia a seconda della banda a disposizione.

Vediamo quindi questo X11Forwarding. Dunque, per abilitarlo dobbiamo avviare una sessione ssh aggiungendo l’opzione “-X”, quindi “ssh -X nomeutente@indirizzoip”, una volta che siamo dentro il server non dobbiamo far altro che digitare il nome dell’eseguibile da avviare, e a questo punto grazie al forwarding, sul sistema operativo client verrà visualizzata la finestra dell’applicativo avviato sul server remoto. Ciò che contraddistingue questo sistema rispetto, ad esempio a una sessione desktop remoto classica, è che il programma sfrutta le librerie grafiche del computer client, fatta eccezione per i contenuti multimediali che invece vengono captati direttamente dal server remoto. La compatibilità è ovviamente al 100% tra le distro Linux in quanto hanno le stesse librerie grafiche e lo stesso server grafico. Su Windows bisogna installare un server X compatibile, ma è possibile comunque usare il forwarding. Lo stesso vale anche per macOS.

SFTP è praticamente la versione SICURA del normale protocollo di trasferimento file, il quale funzionamento avviene mediante SSH. Per stabilire una connessione SFTP è semplicissimo, basta scrivere su una console: sftp nomeutente@ipserver, autorizzare il tutto ed entrare.

Si può navigare internamente utilizzando il comando CD, si possono cambiare i permessi col comando chmod, creare cartelle con mkdir, oppure caricare file col comando put. Ad esempio, mettiamo che volessi trasferire questo video al server SSH, semplicemente mi connetto ad SFTP, e mi reco nella cartella in cui voglio fare il trasferimento. Quindi scriviamo put /percorsofilelocale/

A questo punto partirà l’upload.

Adesso che abbiamo visto alcune nozioni di base su SSH, vediamo come accedervi dall’esterno. Requisito principale per l’accesso diretto dall’esterno è avere un IP pubblico e un router che consente lo sbloccaggio delle porte.

Dunque il primo consiglio che vi do è quello di sostituire la porta predefinita, che ricordiamo essere la 22. Per fare questo, nel file di configurazione dobbiamo decommentare la voce “Port” e scegliere una porta qualsiasi al di fuori del range delle cosiddette porte note, che sono tutte quelle porte privilegiate e quindi riservate a livello di sistema. Sono tutte le porte inferiori alla 1024.

Per esempio scegliamo la porta 6000, quindi salviamo e riavviamo il servizio sshd.

In alcuni casi, il modulo di sicurezza SELinux potrebbe bloccare le porte SSH che non siano la 22. In questi casi aggiungiamo la nuova tramite semanager col comando: semanage port -a -t ssh_port_t -p tcp portascelta

Di solito semanage va installato a parte, a seconda della distribuzione. Ma ripeto, di questo preoccupatevi solo se il modulo blocca la porta, altrimenti andate tranquilli.

Non dimentichiamo di aprire, nel caso in cui avessimo il firewall attivo, la porta 3000 col comando ufw allow 3000/tcp.

A questo punto rechiamoci sul pannello di configurazione del nostro router ed abilitiamo il server per l’accesso dall’esterno sulla porta da noi scelta.

Da questo momento in poi per effettuare qualsiasi operazione su SSH, SFTP e SCP non dovremo far altro che utilizzare l’indirizzo IP pubblico, che abbinato alla porta da noi scelta ci riporterà sul server SSH configurato.

Dunque, per il momento è tutto per quanto concerne il protocollo Secure Shell, nella prossima puntata vedremo la questione Local e Remote Tunnel, TCP Forwarding, ecc.

Vi ricordo che per qualsiasi cosa potete consultare la videoguida presente sul canale. Grazie per la lettura!