OpenSSH võtmetega autentmine16. Jun '15

Sissejuhatus

OpenSSH kasutab vaikimisi kasutaja autentimiseks parooli. Tihtipeale see pole just kõige turvalisem viis kasutajat autentida, kuna parooli tippimine võib kõrvalt vaatajale näha olla ning lühikese parooli puhul on realistlik ka sisse murdmine toore jõuga. Selle vastu aitab võtmepaari genereermine ning avaliku võtme serverisse kopeerimine.

Võtmepaari loomine

Vaikimisi ssh-keygen loob RSA võtmed, mis on 2048-bit ja suurema võtmepikkuse puhul piisavalt tugevad, aga järgnevas näites kasutame ECDSA (elliptic-curve digital signature algorithm), kuna see on üks kõige modernsemaid asümmeetrilise võtme algoritme:

ssh-keygen -t ecdsa -P ''

Programm küsib sisendiks kuhu salvestada võtmed, seal võib vajutada Enter, et kasutada vaikimisi kataloogi .ssh kodukataloogis kuhu kirjutatakse privaatne võti failinimiega id_ecdsa ning avalik võti failinimega id_ecdsa.pub. Väljund peaks välja nägema umbkaudu järgnev:

Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/kasutaja/.ssh/id_ecdsa):
Your identification has been saved in /home/kasutaja/.ssh/id_ecdsa.
Your public key has been saved in /home/lauri/.ssh/id_ecdsa.pub.
The key fingerprint is:
2e:36:33:9b:3e:ec:23:62:4f:be:82:b5:8a:de:72:2b kasutaja@localhost
The key's randomart image is:
+--[ECDSA  256]---+
|                 |
|                 |
|                 |
|                 |
|        S        |
|  .    .         |
| o ...* .        |
|oE*+..+B         |
|+++*===o         |
+-----------------+

Loodud võtmepaar vastab konkreetse arvuti parajasti sisse logitud kasutajale ning avalik võti sobib selle kasutaja autentimiseks teistes arvutites.

Avaliku võtme kopeerimine

Enne kui jätkad veendu et sihtmasinas oleks OpenSSH server paigaldatud, vastasel korral võid serverist vastuseks saada Connection refused:

sudo apt-get install openssh-server

Ülal loodud id_ecdsa.pub alusel saab kasutajat autentida ning selleks, et võimaldada sihtarvuti paroolita ligipääs avaliku võtme alusel võib kasutada ssh-copy-id käsku:

ssh-copy-id kasutaja@sihtmasin

See käsk logib sihtmasinasse sisse parooliga, vajadusel loob .ssh kataloogi sihtmasinas ning lisab sinna authorized_keys faili lõppu avaliku võtme.

~/.ssh/id_ecdsa~/.ssh/id_ecdsa.pub~/.ssh/authorized_keysLocal machineRemote machinessh-keygen -t ecdsaPasswordauthenticationssh-copy-id remote-user@remote-host

ssh-copy-id abil ssh-keygen loodud võtmepaarist avaliku võtme kaugmasinasse lisamine

Võtmega sisse logimine

Kui võtmed on olemas ning avalik võti lisatud sihtmasinasse, peaks autentmine toimima ilma paroolita. Kui võtmepaar on olemas pakub klient seda autentmismeetodit serverile, kui serverile sobib kliendi pakutav võti lastakse kasutaja sisse.

~/.ssh/id_ecdsa~/.ssh/id_ecdsa.pubsshdLocal machineRemote machinessh user@host~/.ssh/authorized_keysOffer public keyFall back to password authentication

Kliendi autentmine võtmega

Parooliga sisselogimise keelamine

Kui võtmega autentmine toimib ning parooli pole vaja mõneks muuks otstarbeks (nt sudo), võib eemaldada ja keelata kasutaja parooli sihtmasinas:

# Parooli eemaldada ja keelata saab vaid root
passwd -d -l kasutajanimi

Kui parooliga sisselogimist on siiski tarvis aga üle SSH ligipääs võiks olla lubatud vaid avaliku võtmega, võib SSH serveri konfiguratsioonis välja lülitada parooliga autentmise kasutades PasswordAuthentication no rida:

sed -r -e 's/^.?PasswordAuthentication .*/PasswordAuthentication no/' -i /etc/ssh/sshd_config
service ssh reload
OpenSSH ssh-copy-id