OpenSSH: login con chiave pubblica/privata

Se avete mai avuto un server ssh connesso ad internet e avete dato un’occhiata ai log non serve che vi spieghi perché può essere una buona idea impostare il login sul vostro server con una coppia di chiavi e disattivare il login tramite password. Se non avete mai guardato i log del vostro sistema forse avete sbagliato blog.

Il login con chiave pubblica/privata ha una logica parecchio semplice: chiunque sia in possesso della chiave privata (e se settata della relativa password) può accedere al sistema con l’utente associato alla chiave pubblica. Se stessimo trattando qui una tematica di sicurezza dovrei farvi notare quanto sia importante non pensare che il sistema della chiave pubblica/privata (soprattutto se da solo) sia un modo sicuro per abilitare l’accesso ad un sistema senza password, ma il focus qui è un altro.

Questa non è una guida di sicurezza, non descrive un processo e non consiglia una prassi, descive semplicemente uno strumento e come poterlo utilizzare, non come, ripeto, doverlo utilizzare.

Per la scrittura di questa guida sono stati usati due container Ubuntu 18.04:

# lxc launch ubuntu:b client
# lxc launch ubuntu:b server

il client ha ip 10.0.0.100 mentre il server 10.0.0.200, in entrambi è stato creato l’utente “unghio”

la configurazione: sul vostro server aprite il file /etc/ssh/sshd_config


# vim /etc/ssh/sshd_config

...
#PubkeyAuthentication yes
...

questa è molto probabilmente la situazione che troverete, cioè l’accesso tramite chiave è già attivo di default (il file di configurazione di openssh è scritto in questo modo: le righe commentate sono i parametri di default) e non è necessario modificare il file. Qualora non dovesse essere così o volete proprio proprio essere sicuri potete decommentare la riga togliendo il simbolo # e impostando il valore a “yes”.

Sui container che stiamo utilizzando l’accesso tramite password è disabilitato, quindi per il momento modificheremo la seguente direttiva:

PasswordAuthentication no

in:

PasswordAuthentication yes

altrimenti non saremo in grado di copiare la chiave sul server.

Per generare le chiavi su linux potete utilizzare ssh-keygen (dal client):

unghio@client:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/unghio/.ssh/id_rsa): 
Created directory '/home/unghio/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/unghio/.ssh/id_rsa.
Your public key has been saved in /home/unghio/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:EaSvTh8+hMQKyX26hem0fuck4NF/94gDl1Jfig6BzQE unghio@client
The key's randomart image is:
+---[RSA 2048]----+
|      Eoo        |
|       ...       |
| . o ..+..       |
|  + ..=.+..   .  |
|   .oB..So + o   |
|   .*ooo= + o    |
|   o.++.+*. .    |
|    +o.=oooo o   |
|   ....o+.... .  |
+----[SHA256]-----+
unghio@client:~$

e quindi copiamola tramite ssh-copy-id:

unghio@client:~$ ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.200
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".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
unghio@10.0.0.200's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '10.0.0.200'"
and check to make sure that only the key(s) you wanted were added.

unghio@client:~$

a questo punto possiamo provare a collegarci:

unghio@client:~$ ssh 10.0.0.200
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-51-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sun Feb  2 12:46:25 UTC 2020

  System load:  0.04             Processes:           24
  Usage of /:   3.3% of 2.67TB   Users logged in:     0
  Memory usage: 0%               IP address for eth0: 10.0.0.200
  Swap usage:   0%


0 packages can be updated.
0 updates are security updates.


unghio@server:~$

è possibile notare come non sia stata richiesta una password per entrare.

Nella malaugurata ipotesi che utilizziate Windows, per la generazione delle chiavi potete usare puttygen (come generare le chiavi con puttygen), mentre per copiare la chiave sull’host remoto (oltre al sempreverde copia-incolla) potete usare pscp o FileZilla rinominando successivamente il file.