Ti stai concentrando sulla protezione delle chiavi sul lato client. Ti consiglio di dare un'occhiata sul lato server.
Sul server, puoi limitare ciò che la chiave è autorizzata a fare e da quali server può essere utilizzato, modificando il file authorized_keys
per l'account di destinazione. Ecco un esempio di una chiave con limiti:
from="their.workstation.only.example.com" no-port-forwarding ssh-dss AAA....
Se lo desideri, puoi utilizzare gli indirizzi IP invece di un FQDN.
Per impedire agli utenti di manomettere il file authorized_keys, è possibile spostarlo in una posizione in cui non dispongono dell'autorizzazione alla scrittura. Funzionerà comunque finché avrà l'autorizzazione leggi . Questo può essere fatto modificando sshd_config
e cambiando
AuthorizedKeysFile .ssh/authorized_key
ad esempio
AuthorizedKeysFile /usr/local/authorized_keys/%u
Il %u
viene sostituito dal nome utente, quindi quando qualcuno si connette a ssh con lo username foo
, ssh cercherà il file di chiavi in /usr/local/authorized_keys/foo
. Finché foo
ha accesso in lettura a quel file, la connessione funzionerà.
Modifica: invece di spostare la chiave, puoi semplicemente impostare il file su immutabile, ad esempio:
sudo chattr +i /home/user/.ssh/authorized_keys
Una volta impostato il limite di IP sorgente e protetto il file chiave da manomissioni, non importa se la chiave privata viene trapelata - non sarà ancora utilizzabile da nessun altro sistema.
Ci sono molte altre cose che puoi fare per limitare gli utenti quando si connettono con le chiavi - vedi la pagina man per sshd
. Ci sono anche state alcune domande a questo riguardo su Serverfault, ad esempio accesso SSH limitato per log retrieval .