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.
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.
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.
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ů.
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
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