====== 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