Sicurezza e SSH

Loris Tissino

30 marzo 2011

SSH

SSH è un protocollo per la comunicazione cifrata e autenticata tra due host, che sfrutta la riga di comando.

Server SSH

L'host con cui si vuole comunicare deve avere in funzione il server SSH (con Ubuntu è sufficiente installare il pacchetto openssh-server)

Client SSH

Per avviare la sessione di lavoro, da un terminale si digita

ssh utente@hostname

dove utente e hostname sono rispettivamente il nome dell'utente e il nome (o l'indirizzo IP) dell'host.

Alla prima connessione, viene richiesto di confermare l'autenticità della controparte:

The authenticity of host '****.local (192.168.0.110)' can't be established.
RSA key fingerprint is 09:61:6d:8e:6f:79:a7:a5:6d:f7:91:1c:a2:cc:8c:35.
Are you sure you want to continue connecting (yes/no)?

L'impronta digitale RSA viene memorizzata nel file locale ~/.ssh/known_hosts.

Esecuzione di comandi su calcolatore remoto

È possibile specificare un comando da eseguire sul calcolatore remoto:

ssh utente@hostname ls

Autenticazione senza password

Un utente può generare una coppia di chiavi RSA su un host e sfruttare un meccanismo di sfida per ottenere l'autenticazione su un altro host senza bisogno di password.

Supponendo di voler amministrare (con privilegi di root) un altro host, dovremo seguire i seguenti passi.

Sul nostro calcolatore generare una coppia di chiavi RSA:

ssh-keygen -t rsa

Copiare il file ~/.ssh/id_rsa.pub nella directory .ssh dell'utente con il quale ci vogliamo autenticare sull'host remoto (nel nostro caso, l'utente root).

Sul calcolatore da gestire, accodare il file copiato al file ~/.ssh/authorized_keys dell'utente con il quale ci vogliamo autenticare (il file deve risultare di sua proprietà).

Autenticazione senza verifica chiave host

In alcune situazioni, può essere necessario evitare che venga chiesta la conferma dell'autenticità della controparte (ad esempio, nel caso di host il cui indirizzo IP è ottenuto via DHCP).

Si può disabilitare la richiesta con i seguenti parametri sulla riga di comando:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@otherhost.local

Oppure, su base permanente, si può modificare il proprio file ~/.ssh/config con il seguente contenuto:

Host *.local
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

Ovviamente, il rischio è di essere soggetti ad attacchi di tipo Man in the middle.