Se sei un webmaster o semplicemente hai amici NERD o developer probabilmente avrai già sentito il termine chiave SSH. Fu nel 2010 la prima volta che un amico mi consigliò di usarle per accedere al mio server, sono più sicure, disse. All’inizio le chiavi SSH mi incutevano abbastanza timore e non volevo “incasinarmi la vita”, non sapevo proprio cosa fossero e avevo la classica paura dell’ignoto. Per diverso tempo ho continuato ad usare la classica coppia user e password. Che errore da ignorante… Poi ho scoperto che le ssh key sono sicure e semplicissime da usare, ora non posso farne più a meno.
Leggi il resto di questo articolo per saperne di più su cosa sia e come abilitare l’autenticazione con chiave ssh.
In pratica una chiave SSH è una credenziale di accesso del protocollo SSH, un file contenente una password super-sicura. La sua funzione è simile a quella del nome utente e della password che usi in tutti i servizi online, ma le chiavi vengono utilizzate principalmente per i processi di login automatizzati a server e per l’implementazione del single sign-on da parte degli amministratori di sistema e degli utenti esperti.
Con una chiave ssh è possibile fare login rapido via ssh in un server, senza dover digitare nome utente e password. Comodo e sicuro.
Il protocollo SSH
La prima versione del protocollo SSH fu sviluppata nell’estate del 1995 da Tatu Ylonen.
Tatu era un ricercatore dell’Università di Helsinki che, in seguito ad un attacco di sniffing sulla rete universitaria, ha deciso sviluppare un sistema per rendere la connessione ad un server più sicura.
Un attacco di sniffing intercetta e registra il traffico trasmesso su una rete e può fornire agli aggressori nomi utente e password che possono quindi essere utilizzati per ottenere l’accesso a risorse IT critiche.
In seguito a quell’attacco, Tatu Ylonen creo il protocollo SSH (SSH.com).
Oggi, il protocollo SSH è ampiamente utilizzato per accedere ai sistemi in remoto e la sua crittografia avanzata lo rende ideale per eseguire attività come l’emissione di comandi remoti e la gestione remota dell’infrastruttura di rete e di altri componenti vitali del sistema. Per utilizzare il protocollo SSH è necessario installare un paio di software. I sistemi remoti devono disporre di un software chiamato demone SSH e il sistema utilizzato per inviare comandi e gestire i server remoti deve disporre di un software chiamato client SSH. Questi software sono necessari per creare un canale di comunicazione adeguato utilizzando il protocollo SSH.
Praticamente ogni sistema Linux ha un demone SSH di default, non ho mai dovuto installarlo sui vari server che mi sono capitati negli anni. Serve solo un client come Putty o MobaXterm per connettersi al server.
Le chiavi SSH sono credenziali di autenticazione
Il protocollo SSH (Secure Shell) viene utilizzato per la gestione di reti, sistemi operativi e configurazioni. È anche all’interno di molti strumenti di trasferimento file come Filezilla e strumenti di gestione della configurazione. Ogni grande azienda e data center lo utilizza.
Le chiavi SSH sono un metodo di autenticazione utilizzato per ottenere l’accesso con connessione crittografata tra sistemi. Questo protocollo consente l’automazione che rende possibili ed economici i servizi cloud moderni e altri servizi dipendenti dal computer. Offre praticità e maggiore sicurezza se gestito correttamente.
Funzionalmente le chiavi SSH assomigliano alle password, sono credenziali di autenticazione. Garantiscono l’accesso e controllano chi può accedere a cosa.
Tecnicamente le ssh key sono chiavi crittografiche che utilizzano un sistema crittografico a chiave pubblica, definiscono chi può accedere a ciascun sistema.
Le chiavi autorizzate – authorized_keys sono chiavi pubbliche che consentono l’accesso.
Le chiavi di identità identificano gli utenti e forniscono l’accesso. Le chiavi di identità sono chiavi private utilizzate da un client SSH per autenticarsi durante l’accesso a un server SSH.
Le chiavi autorizzate e le chiavi di identità sono chiamate congiuntamente chiavi utente. Si riferiscono all’autenticazione utente, anziché alle chiavi host utilizzate per l’autenticazione host.
Cos’è l’autenticazione con chiave pubblica – SSH key authentication
Il protocollo SSH supporta molti metodi di autenticazione. Probabilmente uno dei più importanti è l’autenticazione con chiave pubblica per connessioni automatizzate.
La motivazione per cui è andrebbe preferita l’autenticazione con chiave pubblica rispetto ad user & password è la sicurezza. L’autenticazione con chiave pubblica fornisce una forza crittografica che persino password estremamente lunghe non possono offrire. Inoltre, l’autenticazione con chiave pubblica è comoda in quanto libera gli utenti dal ricordare password complicate (o peggio ancora, scriverle) e consente di implementare il single sign-on sui server SSH a cui si connettono.
La crittografia a chiave pubblica ruota attorno a un paio di concetti chiave: crittografia asimmetrica e coppie di chiavi.
Algoritmi di Crittografia asimmetrica
Come con qualsiasi schema di crittografia, l’autenticazione con chiave pubblica si basa su un algoritmo. Esistono diversi algoritmi ben studiati, sicuri e affidabili – i più comuni sono RSA e DSA. Tra poco ti mostrerò come creare una chiave RSA.
A differenza degli algoritmi di crittografia comunemente noti (simmetrici o a chiave segreta), gli algoritmi di crittografia a chiave pubblica funzionano con due chiavi separate. Queste due chiavi formano una coppia specifica per ciascun utente.
Coppia di chiavi: pubblica e privata
Ogni coppia di chiavi SSH include due chiavi:
- Una chiave pubblica che viene copiata sui server SSH. Chiunque abbia una copia della chiave pubblica può crittografare i dati che possono essere letti solo dalla persona che detiene la chiave privata corrispondente. Una volta che un server SSH riceve una chiave pubblica da un utente e la considera affidabile, il server contrassegna la chiave come autorizzata nel suo file /home/.ssh/authorized_keys. Tali chiavi sono chiamate chiavi autorizzate.
- Una chiave privata che rimane (solo) all’utente. Il possesso di questa chiave è la prova dell’identità dell’utente. Solo un utente in possesso di una chiave privata che corrisponde alla chiave pubblica sul server sarà in grado di autenticarsi correttamente. Le chiavi private devono essere archiviate e gestite con cura e tenute al sicuro. Le chiavi private utilizzate per l’autenticazione dell’utente sono chiamate chiavi di identità.
Come impostare le chiavi SSH su server Linux – Ubuntu
Come abbiamo visto SSH, o shell sicura, è un protocollo crittografato utilizzato per amministrare e comunicare con i server in praticità e sicurezza. Quando lavori con un web server come Ubuntu, è probabile che trascorrerai diverso tempo in una sessione su terminale connesso al tuo server tramite SSH. Per risparmiare tempo ti consiglio di usare le chiavi ssh per accedere più in fretta ai tuoi server.
Nei prossimi paragrafi vedremo come configurare le chiavi SSH per un’installazione Ubuntu in tre semplici passaggi.
Passaggio 1: crea la coppia di chiavi RSA
Il primo passo è creare una coppia di chiavi (privata e pubblica) sul computer client (di solito il tuo computer). Apri la shell oppure il prompt dei comandi se usi Windows e digita il seguente comando:
ssh-keygen
Per impostazione predefinita, il comando ssh-keygen crea una coppia di chiavi RSA a 2048 bit, che è abbastanza sicura per la maggior parte dei casi d’uso (è possibile facoltativamente passare il flag -b 4096 per creare una chiave più grande a 4096 bit).
Dopo aver inserito il comando, dovresti vedere il seguente output:
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
Premi INVIO per salvare la coppia di chiavi nella sottodirectory /.ssh/ nella directory home oppure specifica un percorso alternativo. Se in precedenza è stata generata una coppia di chiavi SSH, è possibile che venga visualizzato il seguente prompt:
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Se scegli di sovrascrivere la chiave sul disco, non sarà più possibile eseguire l’autenticazione utilizzando la chiave precedente. Fai molta attenzione quando selezioni YES, poiché si tratta di un processo distruttivo che non può essere invertito. Dovresti quindi vedere il seguente prompt:
Enter passphrase (empty for no passphrase):
Qui puoi eventualmente inserire una passphrase sicura da usare insieme alla chiave ssh. Una password aggiunge un ulteriore livello di sicurezza.
In alternativa non scrivere niente e premi INVIO per non usare una password insieme alla chiave ssh. Dovresti quindi vedere il seguente output:
Your identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+
Ora hai una chiave pubblica e una privata che puoi usare per autenticarti sul server. Il passaggio successivo consiste nel posizionare la chiave pubblica sul server in modo da poter utilizzare l’autenticazione basata su chiave SSH per accedere.
Passaggio 2: copia la chiave pubblica sul server
Il modo più veloce per copiare la tua chiave pubblica nell’host Ubuntu è usare un’utilità chiamata ssh-copy-id. Per la sua semplicità, questo metodo è altamente raccomandato se disponibile. Se non disponi di ssh-copy-id sul tuo computer client, puoi utilizzare uno dei due metodi alternativi forniti in questa sezione (copia tramite SSH basato o copia manuale della chiave).
Copia della chiave pubblica usando ssh-copy-id
Lo strumento ssh-copy-id è incluso per impostazione predefinita in molti sistemi operativi, quindi potresti averlo disponibile sul tuo sistema locale. Perché questo metodo funzioni, è necessario disporre già dell’accesso SSH basato su password al server.
Per utilizzare questo tool è sufficiente specificare l’host remoto a cui vuoi connetterti e l’account utente con accesso SSH con password. Questo è l’account in cui verrà copiata la chiave SSH pubblica.
La sintassi per copiare la chiave pubblica sul server è:
ssh-copy-id username@remote_host
È possibile che venga visualizzato il seguente messaggio:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Ciò significa che il computer locale non riconosce l’host remoto. Questo accadrà la prima volta che ti connetti a un nuovo host. Rispondi “sì” e premi INVIO per continuare.
Successivamente ssh-copy-id eseguirà la scansione del tuo account locale alla ricerca della chiave id_rsa.pub che abbiamo creato in precedenza. Quando trova la chiave, ti chiederà la password dell’account dell’utente remoto:
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
username@203.0.113.1's password:
Digita la password (la digitazione non verrà visualizzata per motivi di sicurezza) e premi INVIO. Il tool si connetterà all’account sull’host remoto utilizzando la password fornita. Quindi copierà il contenuto della tua chiave ~/.ssh/id_rsa.pub in un file nella directory principale ~/.ssh dell’account remoto chiamato authorized_keys.
Dovresti vedere il seguente output:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.
A questo punto, la chiave id_rsa.pub è stata caricata nel server remoto. Puoi continuare con il passaggio 3.
Copia della chiave pubblica tramite SSH
Se non disponi di ssh-copy-id ma hai accesso SSH basato su password a un account sul tuo server, puoi caricare le tue chiavi usando un metodo SSH convenzionale.
Possiamo farlo usando il comando cat per leggere il contenuto della chiave SSH pubblica sul nostro computer locale e eseguirne il piping attraverso una connessione SSH al server remoto.
Iniziamo assicurandoci che la directory ~/.ssh esista e abbia le autorizzazioni corrette per l’account che stiamo utilizzando.
Possiamo quindi generare il contenuto che abbiamo reindirizzato in un file chiamato authorized_keys all’interno di questa directory.
Per praticità utilizzeremo il simbolo >> per aggiungere il contenuto della chiave al file authorized_keyw anziché sovrascriverlo. Questo ci consentirà di aggiungere chiavi senza distruggere le chiavi aggiunte in precedenza.
Il comando completo è simile al seguente:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
È possibile che venga visualizzato il seguente messaggio:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Ciò significa che il computer locale non riconosce l’host remoto. Questo accadrà la prima volta che ti connetti a un nuovo host. Digitare “sì” e premere INVIO per continuare. Successivamente, ti verrà richiesto di inserire la password dell’account utente remoto:
username@203.0.113.1's password:
Dopo aver inserito la password, il contenuto della chiave id_rsa.pub verrà copiato alla fine del file authorized_keys dell’account dell’utente remoto. Continuare con il passaggio 3 se l’operazione ha avuto esito positivo.
Copia manuale della chiave pubblica
Se non si dispone dell’accesso SSH basato su password al server disponibile, sarà necessario completare manualmente la procedura sopra descritta.
Aggiungeremo manualmente il contenuto del tuo file id_rsa.pub al file ~/.ssh/authorized_keys sul tuo computer remoto.
Per visualizzare il contenuto della chiave id_rsa.pub, digita questo nel tuo computer locale:
cat ~/.ssh/id_rsa.pub
Vedrai il contenuto della chiave, che dovrebbe assomigliare a questo:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Accedi al tuo host remoto usando il metodo che hai a disposizione. Una volta che hai accesso al tuo account sul server remoto, assicurati che esista la directory ~/.ssh. Questo comando creerà la directory se necessario, o non farà nulla se esiste già:
mkdir -p ~/.ssh
Ora puoi creare o modificare il file authorized_keys all’interno di questa directory. Puoi aggiungere il contenuto del tuo file id_rsa.pub alla fine del file authorized_keys, creandolo se necessario, usando questo comando:
echo public_key_string >> ~/.ssh/authorized_keys
Nel comando sopra, sostituisci public_key_string con l’output del comando cat ~/.ssh/id_rsa.pub che hai eseguito sul tuo sistema locale. Dovrebbe iniziare con ssh-rsa AAAA ….
Infine, ci assicureremo che la directory ~/.ssh e il file authorized_keys abbiano le autorizzazioni appropriate impostate:
chmod -R go= ~/.ssh
Ciò rimuove in modo ricorsivo tutte le autorizzazioni “gruppo” e “altro” per la directory ~/.ssh/.
Se stai utilizzando l’account root per impostare le chiavi per un account utente, è anche importante che la directory ~/.ssh appartenga all’utente e non al root:
chown -R johnny:johnny ~/.ssh
In questo tutorial il nostro utente si chiama johnny ma è necessario sostituire il nome utente appropriato nel comando sopra.
Ora possiamo tentare l’autenticazione senza password con il nostro server Ubuntu.
Passaggio 3: autenticare il server Ubuntu utilizzando le chiavi SSH
Se hai completato correttamente una delle tre procedure appena mostrate, dovresti essere in grado di accedere all’host remoto senza la password dell’account remoto. Il processo di base è lo stesso:
ssh username@remote_host
Se è la prima volta che ti connetti a questo host (se hai utilizzato l’ultimo metodo sopra), potresti vedere qualcosa del genere:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Ciò significa che il computer locale non riconosce l’host remoto. Digitare “sì” e quindi premere INVIO per continuare.
Se non è stata fornita una passphrase per la chiave privata, si accederà immediatamente. Se al momento della creazione della chiave è stata fornita una passphrase per la chiave privata, verrà richiesto di immetterla ora (tieni presente che le sequenze di tasti non verrà visualizza nella sessione del terminale per motivi di sicurezza). Dopo l’autenticazione, dovrebbe aprirsi una nuova sessione della shell con l’account configurato sul server Ubuntu.
Se l’autenticazione basata su chiave ha avuto esito positivo, continua a imparare come proteggere ulteriormente il tuo sistema disabilitando l’autenticazione con password.
Passaggio 4: disabilitare l’autenticazione con password sul server
Se sei stato in grado di accedere al tuo account utilizzando SSH senza una password, hai configurato correttamente l’autenticazione basata su chiave SSH per il tuo account. Tuttavia, il tuo meccanismo di autenticazione basato su password è ancora attivo, il che significa che il tuo server è ancora esposto ad attacchi di forza bruta.
Prima di completare i passaggi in questa sezione, assicurati di disporre dell’autenticazione basata su chiave SSH configurata per l’account root su questo server o, preferibilmente, di avere un’autenticazione basata su chiave SSH configurata per un account non root su questo server server con privilegi sudo. Questo passaggio bloccherà gli accessi basati su password, quindi garantire che tu sia ancora in grado di ottenere l’accesso amministrativo è fondamentale.
Dopo aver verificato che il tuo account remoto ha i privilegi di amministratore, accedi al tuo server remoto con le chiavi SSH, come root o con un account con privilegi di sudo. Quindi, apri il file di configurazione del demone SSH:
sudo nano /etc/ssh/sshd_config
All’interno del file, cerca la direttiva chiamata PasswordAuthentication. Questa riga potrebbe essere commentata. Rimuovi il commento dalla riga e imposta il valore su “no”. Questo accorgimento disabilita la possibilità di accedere tramite SSH utilizzando le password dell’account e rende il server più sicuro da attacchi brute-force:
...
PasswordAuthentication no
...
Salva e chiudi il file al termine premendo CTRL + X, quindi Y per confermare il salvataggio del file e infine INVIO per uscire da nano (l’editor). Per implementare effettivamente queste modifiche, è necessario riavviare il servizio sshd:
sudo systemctl restart ssh
Per precauzione, apri una nuova finestra del terminale e verifica che il servizio SSH funzioni correttamente prima di chiudere questa sessione:
ssh username@remote_host
Dopo aver verificato il servizio SSH, puoi chiudere in sicurezza tutte le sessioni del server correnti.
Il demone SSH sul tuo server Ubuntu ora risponde solo alle chiavi SSH. L’autenticazione basata su password è stata disabilitata correttamente.
Conclusione
In questa guida abbiamo visto a cosa serve il protocollo SSH e come le chiavi crittografate possono migliorare la sicurezza del nostro server. Hai creato e configurato l’autenticazione basata su chiave SSH sul tuo server che ti consente di accedere senza fornire una password dell’account. Ora puoi dimenticarti la password ;)
Spero che questa guida ti convinca definitivamente ad utilizzare le ssh key, come i veri NERD. Hai domande? Lascia un commento.
Commenti |2
Lascia un commentobuonasera ho costruito il sito per il mio negozio con un programma francese chiamato webacappella, per il trasferimento sull host (io ho aurba e mi hanno fatto modificare il profilo in Hosting Advanced Linux) ho creato una chiave con putty l ho importata dalla gestione del mio dominio su aruba ma di collegarsi in sftp non ne vuole sapere neanche quando faccio i tentativi con filezilla, mentre in ftp tutto va bene, mi puoi dare una mano ormai e due settimane che ci sbatto la testa
Buonasera! Mi dispiace sentire che stai riscontrando problemi nel collegarti al tuo hosting tramite SFTP. Cercherò di fornirti una guida dettagliata per risolvere questo problema, basandomi su dati e procedure standard. Segui questi passaggi:
1. Verifica delle Credenziali SFTP
Prima di tutto, è importante assicurarsi che tu stia utilizzando le corrette credenziali SFTP. Queste includono:
2. Configurazione di PuTTY e FileZilla
PuTTY:
FileZilla:
3. Verifica delle Impostazioni del Server
Aruba Hosting Advanced Linux:
4. Test della Connessione
Dopo aver configurato tutto, prova a connetterti utilizzando FileZilla. Se incontri errori, prendi nota dei messaggi di errore specifici per ulteriori indagini.
5. Risoluzione dei Problemi Comuni
6. Contatta il Supporto di Aruba
Se dopo tutti questi passaggi continui a riscontrare problemi, ti consiglio di contattare il supporto tecnico di Aruba. Potrebbero avere delle restrizioni specifiche o configurazioni del server che influenzano la tua capacità di connetterti tramite SFTP.
Ricorda che la risoluzione dei problemi di connessione può richiedere un approccio iterativo. Verifica ogni passaggio attentamente e non esitare a cercare ulteriori informazioni specifiche per il tuo caso. Spero che queste informazioni ti aiutino a risolvere il problema. Se hai bisogno di ulteriori dettagli o chiarimenti, sentiti libero di chiedere.