In questa guida ti spiego cos’è SSH e a cosa serve.
Vedremo poi i vari modi per stabilire una connessione SSH a un server remoto, ed eseguiremo un accesso SSH con password e un accesso SSH con chiave, dopo aver visto come creare una chiave di accesso.
Spiego inoltre come rendere il server più sicuro da attacchi bruteforce disabilitando l’accesso con password e cambiando la porta SSH di default con una personalizzata.
Ma senza ulteriori indugi entriamo nel tema, cos’è SSH ed a cosa serve?
Table of Contents
Cos’è SSH
SSH è l’acronimo di Secure Socket Shell. Il protocollo è stato creato nel 1995 da un ricercatore universitario finlandese. La seconda versione è stata creata 10 anni dopo e ad oggi non presenta vulnerabilità.
Questo protocollo consente agli amministratori di sistema di accedere in modo sicuro a un computer remoto. In quanto interprete di comandi permette agli amministratori di sistema di impartire comandi e avviare applicazioni.
In pratica questo protocollo ci permette di stabilire una sessione remota con un altro computer usando un’interfaccia a riga di comando.
Origini e storia
SSH è stato progettato da Tatu Ylönen nel 1995, che come dicevo al tempo era un ricercatore universitario finlandese. Alla prima versione, che fu chiamata SSH – 1, furono trovati diversi difetti, corretti con la seconda versione che è stata adottata come standard nel 2008.
La versione 2 non è compatibile con la prima versione e usa un controllo dell’integrità più forte al fine di migliorare la sicurezza.
Cosa è possibile fare con SSH?
In una parola: tutto.
Tramite SSH impartiamo dei comandi al server usando il linguaggio Shell Scripting.
Questi script Shell sono eseguiti da degli interpreti del kernel di linux. L’interprete più comune è bash, ma ne esistono altri come csh e zsh.
È possibile fare tutto tramite bash. Installare applicazioni, aggiornarle, rimuoverle, controllare la configurazione, verificare quali processi sono attivi, ecc. In pratica un sistema linux può essere controllato interamente da linea di comando, e quindi tramite SSH.
Inoltre, puoi anche portare gli alias che hai creato nel file .bashrc (o .zshrc su Mac) sul server remoto, usando uno script fatto proprio per questo scopo: SSHRC.Connessione SSH
Per connetterci con SSH ad un server remoto ci basta il terminale di Linux o di Mac OSX, se usi Windows sarà necessario un client SSH come putty, di cui parlerò dopo nel dettaglio. Nel caso di Linux potrai connetterti a SSH anche se usi una distribuzione live, ad esempio con Ubuntu su USB.
I nostri hosting semidedicato, hosting WordPress, VPS cloud hosting e server dedicati includono accesso SSH. Nel caso dell’hosting condiviso invece puoi acquistare il servizio a parte con un sovrapprezzo.
In questo articolo tratterò due diversi modi per connettersi a un server remoto con SSH: con password e tramite chiave.
Se vogliamo conneterci con SSH al server avremo bisogno dei seguenti dati:
- Indirizzo IP del server.
- Nome utente (può essere root o un altro nome utente).
- Porta (di solito è la 22, nei nostri servizi usiamo la 2299).
- Password o chiave (dipende da come ti vuoi connettere al server, nei prossimi paragrafi lo spiego nel dettaglio).
Accesso SSH con password
Il modo più semplice per la connessione SSH è l’accesso con password. In pratica ci colleghiamo con utente e password. L’utente può essere root se hai un servizio unmanaged oppure un altro nome utente, ad esempio il nome utente e la password che usi per accedere al cPanel se vuoi connetterti con SSH al tuo hosting semidedicato.
Per connetterti tramite ssh col terminale di Mac OSX o Linux ti basta lanciare questo comando
ssh username@hostname -p portnumber
Che con dati reali diventa in questo modo:
ssh [email protected] -p 2299
Come dicevo sui nostri server usiamo la porta 2299. Nota che se il server al quale ti vuoi connettere usa la porta 22 non importa scrivere “-p 22” dal momento che è la porta di default.
Appena inviamo questo comando il terminale ci chiede se siamo sicuri di volerci connettere.
Questo messaggio ci fa capire che non ci siamo mai connessi a questo server finora, quindi è del tutto normale. Se ti eri già connesso a questo server (col computer che stai utilizzando adesso) e vedi questo messaggio può voler dire due cose:
- il server è stato configurato con una nuova chiave
- qualcuno sta falsificando l’identità del tuo server
Se vedi questo messaggio è possibile che il server ti stia avvisando di un attacco del tipo man-in-the-middle, dovrai valutare caso per caso. Ma come dicevo se si tratta della prima connessione è completamente normale.
A questo punto scriviamo yes e premiamo invio per continuare, e ci viene richiesta la password. Nota che mentre scrivi la password non vedrai alcun feedback sullo schermo, una volta terminato di inserire la password premi invio.
A questo punto siamo dentro. Vediamo infatti il nome del server e non più il nome del nostro computer. Vediamo infatti che siamo connessi come root al server chiamato centos-2gb-hel1-1:
Piuttosto facile no? Vediamo allora come connetterci usando una chiave.
Connessione SSH con chiave: creare le chiavi
La connessione con chiave è il metodo più sicuro per connettersi a un server e dovrebbe essere lo standard. Stiamo forzando questo sistema sui nuovi server per ragioni di sicurezza.
Con questo sistema abbiamo due chiavi, una pubblica e una privata, che servono per creare un sistema di cifratura asimmetrico. Con questa cifratura i messaggi sono cifrati e decifrati con chiavi diverse.
Come dice il nome, le chiavi private sono segrete e mantenute soltanto dal proprietario e hanno una password. Queste chiavi sono usate per provare la propria identità.
Le chiavi pubbliche sono appunto pubbliche, e vengono distribuite su tutti i server con i quali vuoi comunicare in modo sicuro.
Le due chiavi hanno un dipendenza matematica, ma è impossibile derivare la chiave privata partendo dalla chiave pubblica. Inoltre posseggono un’altra qualità: i dati cifrati con la chiave pubblica possono essere decifrati soltanto dalla chiave privata e viceversa.
Dopo questa breve spiegazione sul funzionamento delle chiavi vediamo come usare questo metodo passo passo.
Creare una coppia di chiavi su Mac OSX e Linux
Apriamo il terminale e digitiamo il comando:
ssh-keygen -o -b 4096
Premi invio per generare la chiave. L’opzione “-o” è stata aggiunta nel 2014, se ti dà errore rimuovila e riprova.
A questo punto ci viene richiesto in che posizione salvare la chiave:
Se è la prima chiave che stai creando puoi lasciare la posizione di default, altrimenti inserisci una posizione per non sovrascrivere la tua chiave. In ogni caso non preoccuparti, prima di sovrascrivere la tua chiave ti viene chiesta una conferma, quindi la possibilità di sovrascrivere la tua chiave per errore è remota.
Dal momento che ho già una chiave ma ne voglio creare un’altra per questo tutorial ho deciso di metterla in .ssh e chiamarla chiave-tut.
A questo punto premiamo invio e ci viene chiesto d’inserire un passphrase, ovvero una password per la chiave. Puoi semplicemente premere invio e lasciarla senza passphrase, ma per sicurezza ti consiglio di inserire una password. Scegline una che ti ricordi perché ti verrà richiesta ogni volta che ti connetterai con SSH al server usando la tua chiave.
Dopo aver premuto invio ti chiederà di scrivere di nuovo la chiave per conferma, poi premi di nuovo invio per generare la chiave.
Creare una coppia di chiavi su Windows
Scarica PuTTYgen sul tuo computer e apri l’applicazione.
Seleziona RSA, imposta il numero di bit a 4096 e clicca su “Generate”.
Muovi il mouse nell’area vuota per generare “casualità”:
Le due chiavi vengono generate:
Inserisci un commento per la chiave, poi salva la chiave privata e la chiave pubblica in una cartella di tua scelta, salvale nella stessa cartella. Copia il testo della chiave pubblica, ti servirà a breve.
Adesso abbiamo generato le nostre chiavi, qual è il prossimo passo per connetterci al server tramite SSH?
Aggiungi la chiave sul server
Se hai un piano hosting o un dedicato managed con noi non puoi aggiungere la chiave perché non hai i permessi di root. Ci dovrai inviare la tua chiave pubblica e penseremo noi ad aggiungerla al server.
Se hai accesso root devo aggiungere la tua chiave pubblica al server, ci sono diversi modi per farlo.
Copia la chiave pubblica sul server usando ssh-copy-id
ssh-copy-id è uno strumento che è presente di default su molti sistemi, proveremo per prima con questo metodo per la sua semplicità.
Per poter usare questo metodo devi avere accesso al server con password. Quello che dovrai fare per usare questo comando è specificare l’host e l’utente (al quale hai accesso con password) per il quale vuoi aggiungere la chiave.
ssh-copy-id username@remote_host
Potresti ricevere questo errore:
/usr/bin/ssh-copy-id: ERROR: No identities found
Questo perché il comando ssh-copy-id di default cerca la chiave is_rsa.pub, come indicato nella pagina man:
If the -i option is given then the identity file (defaults to ~/.ssh/id_rsa.pub) is used, regardless of whether there are any keys in your ssh-agent. Otherwise, if this: ssh-add -L provides any output, it uses that in preference to the identity file
Se hai usato un altro nome dovrai usare l’opzione -i del comando in questo modo:
ssh-copy-id -i nomechiave.pub username@remote_host
Il sistema ci richiede la password dell’utente per fare il login, e inserisce la chiave.
Dove viene inserita la chiave? Vediamolo nella prossima sezione.
Copiare la chiave usando SSH
La domanda che sorge spontanea è: dove viene salvata questa chiave sul server quando usiamo il comando ssh-copy-id? La chiave viene salvata in:
~/.ssh/authorized_keys
Possiamo quindi navigare tra le cartelle, e modificare il file authorized_keys aggiungendo la nostra chiave pubblica.
Per visualizzare la nostra chiave pubblica possiamo usare il comando (sul nostro computer locale):
cat ~/.ssh/id_rsa.pub
Otterremo un risultato di questo tipo:
ssh-rsa wxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+AAAAB3NzaC1yc2EAAAAABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOSMXN0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8w0pHtACr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw495mDOeCSq5Uw2o8U77+xiFxY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB41XQ9Pqhn7M2G/12gI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb1N1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Adesso ci connettiamo al server usando il metodo che preferiamo ed andiamo ad inserire la nostra chiave pubblica nel file ~/.ssh/authorized_keys
Possiamo farlo tramite un editor come vi:
vi ~/.ssh/authorized_keys
Oppure usando questo comando per aggiungere la nostra chiave al file:
echo public_key >> ~/.ssh/authorized_keys
In questo comando dovrai cambiare “public_key” con la tua chiave pubblica, con un semplice comando puoi aggiungere la tua chiave al file senza la necessità di aprire il file con un editor e modificarlo.
Connessione SSH linux
Adesso veniamo al punto dell’articolo, come eseguire la connessione SSH con Linux?
Apriamo il terminale e digitiamo il comando:
ssh [email protected]
Se è presente una chiave “~/.ssh/id_rsa” il sistema proverà il collegamento con la chiave. Se la chiave che hai creato ha un passphrase questo ti verrà richiesto, altrimenti ti collegherai direttamente.
Altrimenti ti richiederà la password di accesso.
Se hai impostato la chiave correttamente e ti chiede la password il problema è dovuto al fatto che la tua chiave ha un nome diverso dal nome di default, che è id_rsa.
Se usi una chiave con un nome diverso devi specificare nel comando il nome e l’ubicazione della tua chiave:
ssh -i ~/username/nomechiave [email protected]
Se cerchi di connetterti a un nostro servizio, questo userà la porta 2299. Come dicevo prima questo comando cerca di connettersi alla porta 22, quindi se cerchi di connetterti con SSH in questo modo a uno dei nostri server riceverai un errore:
ssh: connect to host 95.217.2.218 port 22: Connection refused
Per questo dobbiamo usare l’opzione “-p” per specificare la porta in questo modo:
ssh [email protected] -p 2299
Ricapitolando a seconda dei casi potresti aver bisogno di usare questo comando
ssh -i ~/username/nomechiave [email protected] -p2299
Connessione SSH Mac
Se usi Mac e vuoi eseguire l’accesso SSH al tuo server remoto, le procedura è identica a quella di linux, dal momento che entrambi i sistemi usano il terminale ed hanno molte similitudini. Puoi fare riferimento al paragrafo qui sopra: connessione SSH Linux.
Connessione SSH Windows
Dal momento che su Windows non hai il terminale hai bisogno di un’applicazione che si chiama Putty. Una volta che lo hai scaricato e installato avvialo.
Inserisci l’hostname e la porta corretti:
Poi nella barra laterale espandi la sezione Connection -> SSH, seleziona la sottocategoria Auth e clicca su Browse e seleziona la chiave di accesso che hai generato prima:
Quindi clicca su Open per connetterti al server.
Se è la prima volta che ti connetti al server vedrai questo messaggio:
Premi ok per confermare, si aprirà il terminale, che ti chiederà il nome utente, inserisci il nome utente. Adesso sei connesso con SSH sul server.
Operazioni avanzate
Una volta che ti sei connesso per la prima volta al server, ci sono alcune operazioni che puoi eseguire per renderlo più sicuro.
Disabilita l’autenticazione con password al server
Se sei riuscito a eseguire l’accesso con la chiave al server senza problemi significa che sei stato in grado di configurare le chiavi correttamente.
L’autenticazione con password resta però attiva, questo significa che il tuo server potrebbe essere vittima di un attacco bruteforce.
Prima di eseguire questa operazione assicurati di aver impostato l’accesso con chiave all’account root sul tuo server, oppure di aver dato accesso con chiave a un account con i privilegi sudo.
Esegui il login al server con account root e modifica il file di configurazione di ssh:
vi /etc/ssh/sshd_config
Oppure esegui l’accesso come utente con privilegi sudo e lancia questo comando:
sudo vi /etc/ssh/sshd_config
Modifica il file impostando:
...
PasswordAuthentication no
...
Quindi salva e riavvia il servizio sshd, ti spiego come fare in un successivo paragrafo. Questa operazione è necessaria per applicare le modifiche.
Cambiare la porta SSH
Anche in questo caso, come sopra, dobbiamo modificare il file di configurazione di sshd usando il comando:
vi /etc/ssh/sshd_config
cerchiamo questa parte di codice:
#Port 22
Nota che potrebbe esserci o meno il carattere cancelletto davanti a “Port”. Il cancelletto indica che la riga è un commento, e quindi viene ignorata.
Elimina il carattere cancelletto se presente e sostituisci la porta 22 con un altro numero compreso tra 1024 e 65536 e salva il file.
Anche in questo caso per applicare le modifiche è necessario riavviare il servizio sshd.
Riavviare sshd
Una volta eseguite queste modifiche sarà necessario riavviare il servizio sshd affiché queste abbiano effetto.
Se usi Ubuntu puoi lanciare il comando:
service ssh restart
Se invece stai usando CentOS devi usare il comando:
systemctl restart sshd
Conclusioni
In questo articolo abbiamo visto come connetterci al server usando utente e password, ma abbiamo anche visto come creare una chiave, aggiungerla al server e connetterci tramite la nostra chiave.
Abbiamo inoltre visto come disabilitare l’accesso SSH con password e come cambiare la porta per la connessione SSH.
Ci sono stati dei passaggi non chiari? Sei riuscito a connetterti con successo usando SSH con la tua chiave? Fammelo sapere con un commento.
Lascia un commento