OpenSSH è un insieme di software free ed open-source per connessione remote client/server crittografate.
L’installazione e la configurazione sulle macchine client locale e server remoto è molto semplice:
Client:
sudo apt install openssh-client
Dopo l’installazione possiamo scegliere quale algoritmo utilizzare per la generazione di una coppia di chiavi:
- DSA: algoritmo obsoleto e non più utilizzato dalla versione OpenSSH 7.
- RSA: sicura per key superiore a 3072 bit
- ECDSA: Dipende dal numero casuale generato dal pc che verrà usato per creare la firma per la chiave
- Ed25519: L’algoritmo a chiave pubblica migliore e più veloce disponibile oggi.
Possiamo procedere alla creazione di una chiave RSA a 4096bit
ssh-keygen -t rsa 4096 -C "Nome PC o Utente"
l’opzione -C è opzionale e serve per aggiungere un commento alla chiave.
Oppure possiamo generare una chiave Ed25519:
ssh-keygen -t ed25519 -C "Nome PC o Utente"
l’opzione -C è opzionale e serve per aggiungere un commento alla chiave. Per la chiave Ed25519 non è necessarie indicare la lunghezza.
Server:
Dopo la generazione della coppia di chiavi, sul server remoto installiamo Openssh-server e creiamo la cartella per aggiungere la chiave pubblica che abbiamo appena creato.
sudo apt install openssh-server mkdir -p ~/.ssh chmod 0700 ~/.ssh
Client:
A questo punto utilizzando l’utility di OpenSSH, copiamo la chiave pubblica (nell’esempio è la chiave ed25519) sul server remoto:
ssh-copy-id -i ~/.ssh/id_ed25519.pub nomeUtente@IP_Server_Remoto
Server:
Lato server, dobbiamo modificare la configurazione di openssh-server per disabilitare connessione tramite password. Editiamo pertanto il file /etc/ssh/sshd_config
#Porta in ascolto per connessione SSH Port 22 AddressFamily inet #l'ip del mio server in cui il demone ssh è in ascolto (da modificare) ListenAddress 192.168.10.1 #consento l'accesso soltanto all'utente admin AllowUsers admin LoginGraceTime 2m PermitRootLogin no MaxAuthTries 3 PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys HostbasedAuthentication no IgnoreRhosts yes PasswordAuthentication no ChallengeResponseAuthentication no UsePAM yes AllowTcpForwarding no X11Forwarding no PrintMotd no PrintLastLog no #Disconnessione dopo 5 minuti di inattività ClientAliveInterval 300 ClientAliveCountMax 0 MaxStartups 2:30:90 Banner /etc/issue.net AcceptEnv LANG LC_*
E’ possibile verificare la configurazione, prima di riavviare il servizio:
sshd -t echo $?
Se la risposta sarà 0, possiamo procedere al riavvio del demone OpenSSH e testare la connessione.
Controlliamo che la porta sia in listening:
netstat -tulpn | grep :22
Client:
Ora possiamo effettuare la connessione da client verso il server
ssh admin@192.168.10.1
Oppure, aggiungendo alla fine del file ~/.ssh/config la seguente configurazione:
Host NomeMioServer HostName 192.168.10.1 User admin Port 22 IdentityFile ~/.ssh/id_ed25519
e poter effettuare la connessione semplicemente digitando:
ssh NomeMioServer