====== Přihlašování na SSH pomocí klíče ======
[[:sifrovani_kryptografie|Šifrování - kryptografie]]
Přihlašování na [[SSH]] pomocí klíče je nejbezpečnější z mnoha metod, použitelných s OpenSSH. Už pro svou délku jsou klíče mnohem obtížněji prolomitelné hrubou silou než hesla.
===== Princip =====
Klient se serveru představí a žádá o komunikaci. Pokud má server u sebe uložený veřejný klíč toho kdo se představil, zašifruje jím nějaká data a pošle je klientovi. Ten je díky svému tajnému soukromému klíči jako jediný dokáže rozluštit a pošle zpět. Server díky tomu ví, že klient je skutečně ten za koho se vydává a je ověřený.
Předtím je potřeba na server nahrát veřejný klíč klienta.
===== Generování klíče =====
Pokud nemám, vytvořit na klientovi adresář
mkdir ~/.ssh && chmod 700 ~/.ssh
**Vygenerování** do souborů veřejný a soukromý klíč (pokud klient svůj bezpečně uchovávaný klíč ještě nemá)
ssh-keygen
Možné volby
# specifikování typu, vychozi a doporuceny je rsa
ssh-keygen -t rsa
# specifikování delky, vychozi a současně dostatečný je 2048
ssh-keygen -b 4096
Budeme dotázání kam klíč uložit (nabízené výchozí místo je nejvhodnější), a na passphrase - přístupové heslo.
Vygeneruje a uloží se klíč do ''~/.ssh'' (ve windows je to ''c:/Users/myUserName/.ssh''). Vytvoří soubory ''id_rsa'' a ''id_rsa.pub'' (privátní a veřejný). Privátní je nutné si střežit jako oko v hlavě, veřejný rozdávat. Pokud existuje klíč (tzn. soubor ''id_rsa'') v adresáři ''$HOME/.ssh'', aplikace ho obvykle rozpoznají a automaticky použijí, takže k němu není potřeba specifikovat cestu.
==== Passphrase - přístupové heslo ====
Soukromý klíč můžeme zašifrovat pomocí hesla, takže případné odcizení souboru s klíčem bude útočníkovi k ničemu, když nebude znát heslo. Při použití klíče s heslem jsme potom na něj dotázání, v našem systému se privátní klíč rozšifruje a dále použije kam má. Pomocí ''ssh-add'' jde zadat heslo pro náš klíč jednorázově pro otevřené sezení. Heslo u veřejného klíče nedává smysl. Heslo lze později měnit (pomocí volby ''-p'').
Heslo lze nezadávat - to dává smysl, pokud se je potřeba provádět automatizované ověřování identity bez interaktivity uživatele.
Osobní klíč by měl být zašifrovaný silným heslem, doporučuje se 10 až 30 znaků.
===== Umístění veřejného klíče na server =====
Veřejný klíč klienta je potřeba **přidat na server** do souboru ''~/.ssh/authorized_keys''
scp ~/.ssh/id_rsa.pub uzivatel@domena.cz:~
ssh uzivatel@domena.cz
mkdir -p ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ../id_rsa.pub
exit
# alternativně
ssh-copy-id -i ~/.ssh/id_rsa.pub uzivatel@domena.cz
**ověření funkčnosti**
ssh uzivatel@domena.cz ls
# pokud klíč nemá standartní umístění
ssh -i cesta/ke/klici/klic uzivatel@domena.cz
----
==== Troubleshooting ====
https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Troubleshooting
Možný problém v nastavených právech domovského a .ssh adresáře.
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && chmod go-w ~
Princip přihlašování klíčem patří k jinému princpitu kryptografie než přihlašování heslem. Klíče http://forum.root.cz/index.php?topic=9660.msg104717#msg104717