Mi sono sempre chiesto come venisse generato il fingerprint SSH sulle macchine *nix, grazie al quale è possibile identificare in modo univoco il server al quale ci si sta connettendo (in barba ad eventuali attacchi MITM).
Successivamente, ad ogni nuova connessione, verrà comparato il fingerprint restituito dal server remoto con quello calcolato sulla chiave pubblica salvata nel file known_host. Se i due fingerprint corrispondono significa che il server a cui ci si sta collegando è quello lecito.
Ma come viene calcolato questo fingerprint? Semplice, ottenendo il digest MD5 dalla chiave pubblica del server remoto salvata nel file known_hosts (e quindi codificata in base64).
Ecco il comando:
[root@client ~]# echo 'AAAAB3NzaC1yc2EAAAABIwAAAQEA0wpEu8edkvPEXqMw7nzOG/fEGE5sZCbwYnECEzlMuYi6DPSWuPJfq4U/N2Gp8RZjXQCs9TrZM91t8GIxxLuae1cZ6kelx+h1tlbh1Rj/n+qzYtjVF4XH4qHfV7Ch7nOBplKKxsNRPb7VtxYzoqgiQEi9xqN0Fgj2GcgxYAHq79qk1lvXGNVJGkDtHpt2x2/BmRLkceyId+xMflq2D4QIvEp8m4leAbYZ04ZU6/Dt44xkA1HQcpZ9ivs8OGoGclPD4QJn80+hy7E0p+O7sAQ3DeAGkoZi8ufOmYG9r4DtvnQJplTffVQwmU9y8dBH9/zit1kawkZscG6yzW2BdrhrGH==' \ | base64 -d | md5sum
il cui output sarà:
414bb2dbd1ba63e6b16117a2abc20bb2
ovvero il fingerprint del server remoto senza i : ogni 2 digit (41:4b:b2:db:d1:ba:63:e6:b1:61:17:a2:ab:c2:0b:b2)
Alla prossima.