La connessione ssh ad un host remoto senza password semplifica molto il lavoro del System Administrator, poiché lo libera dall’onere di dover digitare la password ad ogni connessione ad un host remoto.
In questo breve tutorial, vedremo come configurare correttamente il sevizio SSH in modo da poter accedere ad un host remoto senza dover necessariamente utilizzare ogni volta la password per completare il login.
Il protocollo Secure Shell SSH, rende disponibile connessioni criptate sicure tra host e client, oltre a consentire l’esecuzione di comandi da un client su un host remoto. Tuttavia, per una connessione ssh sicura ad un qualsiasi host è indispensabile poter disporre delle credenziali complete: username
e password
.
Il protocollo SSH ci permette di poter creare una connessione SSH ad host remoti senza dover necessariamente inserire password di alcun tipo. In luogo dell’uso delle password, è possibile di sfruttare la sicurezza offerta dalle chiavi pubbliche e private a garanzia dell’effettivo riconoscimento dell’utente.
Considerazioni sulla sicurezza per una connessione SSH
Nell’ambito della sicurezza informatica, abbiamo già affrontato qualche tempo fa come configurare SSH per garantire un adeguato livello di sicurezza.
Tuttavia, uno degli aspetti che spesso si sottovaluta, riguarda proprio le password. Non sempre può essere sufficiente una password complessa per garantire il massimo della sicurezza.
Molto spesso l’atto stesso di digitare la password da tastiera può essere considerato poco sicuro, al punto da rappresentare una vera e propria falla di sicurezza.
In alcuni contesti, soprattutto ad esempio in quelli molto affollati, qualcuno potrebbe sbirciare da dietro le spalle le password mentre le digitiamo sulla tastiera. Il che solleva un notevole problema di sicurezza non proprio di poco conto.
In altri contesti, invece, i famigerati Keylogger potrebbero rendere del tutto inutile la complessità delle password scelte a protezione di un account su un qualsiasi server.
I problemi di sicurezza appena accennati, possono tuttavia essere agevolmente risolti con l’aiuto proprio di SSH.
Configurare SSH per login senza password in 5 passi
Prima di addentrarci nel dettaglio dei comandi e delle configurazioni, credo sia importante stabilire il contesto nel quale stiamo operando, al fine di evitare eventuale confusione.
Assunzioni preliminari
Al fine di meglio descrivere i comandi e le procedure illustrate più oltre in questo tutorial, può essere decisamente utile fissare alcuni dei seguenti assunti preliminari:
- Server. Il server è un sistema Ubuntu Linux 24.04.1 LTS del laboratorio, con indirizzo IP:
192.168.23.16
, hostname:ubnormal
; - Client. Il Client è un sistema Debian GNU/Linux 12 del laboratorio, con indirizzo IP:
192.168.23.21
, hostname:debellum01
; - Username del server. Lo username che utilizzeremo per l’accesso al server è
ubutest01
; - Username del client. Lo username che utilizzeremo dal client è
debtest01
; - Password. Le password associate agli utenti utilizzati sono uguali ai rispettivi username.
Passo 1- Verifica del servizio SSH
Innanzitutto, verificare sul host remoto (quello al quale vogliamo accedere con il client), che il servizio ssh sia installato ed in esecuzione.
$ sudo service sshd status
Se non è in esecuzione, puoi provare ad avviare il servizio ssh:
$ sudo systemtcl start sshd
Ma se il servizio non si avvia, probabilmente il pacchetto openssh-server
non è stato installato. Prova ad installarlo con uno dei comandi riportati qui sotto. Utilizza quello più appropriato per la tua distribuzione Linux.
$ sudo apt install openssh-server # con Debian, Ubuntu, Mint e derivate
$ sudo dnf install openssh-server # con RedHat, Fedora, CentOS Stream e derivate
$ sudo yum install openssh-server # con CentOS-7 ecc.
Se il servizio si installa correttamente, allora è quasi certamente già avviato ed impostato per l’avvio automatico al boot.
Vale però la pena comunque di verificare che il servizio SSH sia effettivamente in esecuzione sul host remoto.
$ sudo service sshd status
Passo 2 – Generazione delle chiavi per una connessione SSH
Assumendo che è la prima volta che utilizziamo SSH dal client ed al fine di semplificare le operazioni descritte in questo tutorial, eseguiremo la preventiva generazione delle chiavi SSH all’interno del client.
Nota bene che se nel tuo client hai già generato le chiavi SSH, non hai bisogno di eseguire questo passo.
Per generale le chiavi SSH (chiave pubblica e chiave privata) del client, eseguire il comando ssh-keygen
del quale riportiamo l’intero output qui di seguito:
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/debtest01/.ssh/id_rsa):
Created directory '/home/debtest01/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/debtest01/.ssh/id_rsa
Your public key has been saved in /home/debtest01/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:KWYlGANoIO3VPs3lGQ6X2O79yH/OTifzHTTPKlwXLiA debtest01@debellum01
The key's randomart image is:
+---[RSA 3072]----+
|+o..o. o . |
|o.. .+. o * |
|.. ....o.B o |
| . oooE=. . |
| +.S.... .o.|
| o . . ..oo+|
| o ++o=|
| = .B=|
| oo+*|
+----[SHA256]-----+
$
Oltre a generare le chiavi SSH, il comando qui sopra comprenderà anche la creazione automatica, all’interno client, della sotto-directory .ssh
della HOME dell’utente debtest01
, qualora mancante.
Passo 3 – Connessione SSH all’host remoto
Dal client, dove è installato openssh-client
, eseguire il comando per creare la prima connessione ssh al host remoto 192.168.23.16
, con il seguente comando:
$ ssh ubutest01@192.168.23.16
Essendo la prima volta che questo client 192.168.23.21
si connette al host 192.168.23.16
tramite il protocollo SSH, l’output del comando sarà qualcosa di simile a quanto riportato qui sotto:
$ ssh ubutest01@192.168.23.16
The authenticity of host '192.168.23.16 (192.168.23.16)' can't be established.
ED25519 key fingerprint is SHA256:0A6q4453YQO1pUFkOyvrVOc/qcElC/c1/c39p2SkLhY.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
ubutest01@192.168.23.16's password:
Rispondere yes
+ Enter
alla domanda qui sopra per accettare la Fingerprint dell’host remoto. Rispondendo yes
ed accettando la Fingerprint del host remoto, questa in futuro non verrà più richiesta.
A questo punto, ti verrà chiesta la password dello user ubutest01
per accedere al host 192.168.23.16
.
ubutest01@192.168.23.16's password:
Dovrai digitare la password ogni volta che vorrai accedere al host remoto, a meno di completare i passaggi di questo tutorial.
Passo 4 – Copia della chiave pubblica sul host remoto
Siamo finalmente arrivati al passaggio cruciale di questo tutorial. Ora che hai completato tutti i passi preliminari, puoi procedere con la copia della chiave pubblica del tuo client nel server remoto.
Puoi fare questo, con il comando seguente, la cui sintassi generale è ssh-copy-id username@ip_address
; nel caso specifico di questo tutorial, il comando sarà :
$ ssh-copy-id ubutest01@192.168.23.16
il quale produrrà un output simile a quello riportato qui sotto:
$ ssh-copy-id ubutest01@192.168.23.16
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/debtest01/.ssh/id_rsa.pub"
/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
ubutest01@192.168.23.16's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'ubutest01@192.168.23.16'"
and check to make sure that only the key(s) you wanted were added.
$
Notare che per completare l’operazione viene richiesta la password dell’utente remoto ubutest01
, del host remoto 192.168.23.16
, ma solo per questa volta. Proprio perché stai accedendo al host remoto il quale non ha ancora la chiave pubblica del client.
Passo 5 – Connessione SSH per Login al host remoto
Ora che tutto è pronto, proveremo a fare il login al host remoto con SSH per verificare che non ci venga chiesta la password.
Per fare questo, lanciare il classico comando SSH per l’accesso al host remoto:
$ ssh ubutest01@192.168.23.16:
il cui output completo dovrebbe essere simile a quello riportato qui di seguito:
debtest01@debellum01:~$ ssh ubutest01@192.168.23.16
[... OUTPUT TRONCATO...]
ubutest01@ubnormal:~$
Notare che nel comando qui sopra, abbiamo voluto espressamente mettere in evidenza il comando che viene lanciato dal host debtest01
(IP: 192.168.23.21
) ed il prompt del host ubutest01
(IP: 192.168.23.16
) a conferma dell’avvenuto accesso senza richiesta di password.
Inoltre, notare che dall’output riportato qui sopra sono state eliminate le righe del MOTD (Message Of The Day) del host ubutest01
, del tutto inutili ai fini di questo tutorial.
È inoltre importante evidenziare che le chiavi installate sono valide anche per la copia dei file tra host quando si utilizza il comando scp
.
Conclusioni
Sfruttando la potenza e la flessibilità di SSH è possibile effettuare il login su un host remoto senza la necessità di dover fornire anche la password.
L’eliminazione della necessità di digitare la password in una connessione ssh, non è solo un vezzo puramente estetico, come accennato più sopra, ma un livello di sicurezza aggiuntivo. Le password, quando sono troppo complesse, si tende a trascriverle da qualche parte, il ché è un pericoloso indebolimento della sicurezza informatica.
Anche il semplice atto dell’inserire la password da tastiera può rappresentare una falla di sicurezza.
Utilizzare le chiavi SSH per una connessione Ssh ad un host remoto, eliminando la necessità di inserire password è molto più sicuro e fa dormire sonni più tranquilli ai Sysadmin.
Disclaimer
L’immagine di testata è stata generata con DiffusionArt.
CondividiDisclaimer
Questa pagina potrebbe contenere link di affiliazione. Gli acquisti o gli ordini che effettuerai tramite tali link possono generare commissioni che ci aiutano a sostenere questo sito web.