Motivace

Nejčastějším nástrojem autentizace je heslo. To má ale v praktickém životě několik nevýhod: dá se uhodnout, mělo by být složité, musíte si jej pamatovat a hlavně je možné jej odposlechnout. Kompromitovaný SSH server tak může například sledovat, co píšete na klávesnici a na který další počítač se přihlašujete. Navíc pokud používáte jedno extra složité heslo na více strojích, má útočník přístup ke všem.

Všechny výše zmíněné nevýhody řeší metoda přihlašování k SSH pomocí veřejného klíče. Princip je velmi jednoduchý: máme soukromý a veřejný klíč, ten veřejný nahrajeme na všechny naše servery a privátní si necháme. Jelikož není možné z veřejného klíče zpětně ten privátní odvodit, servery nemohou tyto klíče využít k přihlášení mezi sebou, ale jen k ověření vaší totožnosti jakožto držitele privátní části.

Přihlašování pak funguje tak, že server vygeneruje náhodná data, která vám pošle. Vy je svým privátním klíčem podepíšete a pošlete zpět. Server pomocí veřejného klíče, který jste mu předtím dodali, ověří pravost podpisu a pustí vás dovnitř. To vše samozřejmě plně automaticky a velmi rychle. Navíc nedochází vůbec k přenosu tajné informace – privátního klíče. Vlastně tak jednoduše serveru prokážete znalost „hesla“, aniž mu ho musíte ukázat. Díky tomu není server schopen klíč jakkoliv zjistit, zkopírovat a zneužít. Ať by byl server modifikován jakkoliv.

Získání SSH klíče

Pokud ještě SSH klíče nemáte, je třeba je nejprve vygenerovat.

Windows (PuTTY)

V balíku s PuTTY přichází i program PuTTYgen (PuTTY Key Generator).
Doporučuji si zkontrolovat a udržovat aktualizovanou verzi PuTTY. Vždy aktuální verze je dostupná na stránkách autora.

  1. Spusťte program PuTTYgen. obrázek
  2. Typ klíče můžete nechat na RSA, délku klíče 2048 (default).
  3. Klepněte na tlačítko Generate a pohybujte náhodně myší v okně programu. obrázek
  4. Program následně zobrazí vygenerovaný klíč. obrázek
  5. V horním poli je zobrazen veřejný klíč pro nahrání na server. V poli Key comment si můžete ke klíči napsat poznámku, poznámka je pak i v s souboru na serveru a ulehčuje rozlišení jednotlivých klíčů. Do pole Key pashphrase | Confirm passphrase si zadejte heslo (frázi) kterou bude šivrovaný váš privátní klíč. To budete muset zadávat vždy při použití privátního klíče. Volte dostatečně silné heslo.
  6. Klepněte na Save private key a soubor uložte ideálně do domovského adresáře, kam máte přístup pouze vy. Soubor je sice chráněný zadaným heslem (frází), ale v žádném případě by neměl být přístupný někomu dalšímu. Výsledný soubor (ppk) obsahuje i veřejný klíč, pro jeho zobrazení v budoucnosti je potřeba soubor opět nahrát do programu PyTTYgen (tlačítkem Load). Uložení veřejného klíče do separátního souboru je tak čistě volitelné. Veřejný klíč si můžete uložit klepnutím na tlačítko Save public key a zadáním umítění a jména souboru. Jde o běžný textový soubor. obrázek
  7. Pokud budete veřejný klíč ihned nahrávat na server, nechte si okno programu PuTTYgen otevřené pro usnadnění zkopírování veřejného klíče.

Linux

Pro generování klíčů pod linuxem slouží program ssh-keygen z balíku OpenSSH.

  1. Umístění souboru s vygenerovaným klíčem můžete nechat defaultní, pokud již v adresáři .ssh nějaký klíč nemáte.
  2. Zadejte dvakrát heslo (frázi) pro kterou bude šifrovaný váš privátní klíč. To budete muset zadávat vždy při použití privátního klíče. Volte dostatečně silné heslo. obrázek
  3. Program následně vygeneruje klíč a uloží do dvou souborů podle jména zadaného v prvním kroku (id_rsa a id_rsa.pub). obrázek
  4. V souboru id_rsa uložen privátní klíč (soubor je sice chráněný zadaným heslem (frází), ale v žádném případě by neměl být přístupný někomu dalšímu). V souboru id_rsa.pub je uložený váš veřejný klíč pro nahrání na server. obrázek

Nahrání klíče na server

Windows (PuTTY)

  1. Zalogujte se na server kam chcete klíč nahrát.
  2. Ve svém oblíbeném editoru otevřete soubor ~/.ssh/authorized_keys. Pokud soubor nebo i adresář .ssh neexistuje, vytvořte ho.
  3. Do souboru zkopírujte váš veřejný klíč (můžete použít kopírování přes schránku přímo z programu PuTTYgen). V souboru může být víc klíčů, každý na jedné řádce. Veřejný klíč na server můžete přenést i jiným způsobem, WinSCP (scp), pak můžete pro vložení klíče použít příkaz cat "jméno souboru s veřejným klíčem (id_rsa.pub)" >> ~/.ssh/authorized_keys
  4. Obsah souboru s jedním klíčem by měl vypadat nějak takto: obrázek

Linux

Pro nakopírování klíče na server můžete použít utlilitu ssh-copy-id. Pro detaily, prosím, konzultujte manuálové stránky nebo web.

Přihlašování klíčem

Pro to, aby klient při navazování spojení použil klíč, je třeba ho nastavit.

Windows (PuTTY)

  1. Spusťte program PuTTY. obrázek
  2. Vyberte z uložených serverů a klepněte na Load, nebo zadejte hostname serveru a název session pro vytvoření nové konfigurace.
  3. V levém menu rozbalte nabídku Connection - SSH a klepněte na Auth. obrázek
  4. Vedle pole Private key for authentication klepněte na Browse... a zadejte váš soubor s privátním klíčem (.ppk).
  5. V menu Connection - Data si ještě můžete do pole Auto-login username: zadat svoje uživatelské jméno na serveru. PuTTY ho pak odešle za vás.
  6. V levém menu klepněte úplně nahoře na Session, tím se vrátíte na základní oprazovku a tam klepněte na tlačítko Save.
  7. Pokud nyní budete navazovat spojení na server, již byste neměli dostat dotaz na heslo k serveru, ale na heslo (frázi) k privátnímu klíči. obrázek

Jak se zbavit opakovaného zadávání hesla (fráze)

Sice již používáme mnohem bezpečnější metodu přihlašování, ale stále musíme zadávat heslo (frázi), takže rozdíl pro uživatele je malý. Naštěstí i toto si lze zjednodušit. K tomuto účelu slouží agent, který udržuje privátní klíč v paměti a na požádání ho poskytne ssh klientovi. Agent se tak na heslo (frázi) zeptá jen jednou při svém startu.

Windows (PuTTY)

V balíku PuTTY pro tento účel slouží program Pageant.

  1. Spusťte program Pageant. V oznamovací oblasti vedle hodin se vám zobrazí jeho ikona. Udělejte na ní dvojklik a zobrazí se hlavní okno programu. obrázek
  2. Klepněte na tlačítko Add Key a zadejte váš soubor s privátním klíčem (.ppk).
  3. Program se zeptá na heslo (frázi) k privátnímu klíči a pak ho zobrazí jako jednu řádku. V tuto chvíli můžete již okno programu zavřít. obrázek
  4. Pokud nyní spustíte PuTTY a přihlásíte se na server, tak by přihlášení mělo proběhnout zcela automaticky. Po přihlášení na serveru uvidíte podobnou zprávu "Authenticating with public key "......" from agent". obrázek

Tento postup byste museli opakovat vždy každý den po startu počítače. Proto je lepší ho také zautomatizovat.

  1. V adresáři kde máte svůj privátní klíč (třeba SSH v domovském adresáři vytvořte soubor pageant.cmd, klepněte na něj pravým tlačítkem a vyberte Edit a napište do něj
    start "cesta k programu pageant (typicky C:\Program Files\PuTTY\pageant.exe)" název souboru s privátním klíčem (.ppk)
    takže například takto:start "C:\Program Files\PuTTY\pageant.exe" id.ppk obrázek
    (Pokud máte klíčů víc a chcete je všechny nahrát automaticky, jednoduše je přidejte jako další argumenty programu pageant. start "C:\Program Files\PuTTY\pageant.exe" klic1.ppk klic2.ppk klic3.ppk ..... Pageant se vás pak po startu zeptá postupně na všechna hesla (fráze).)
  2. Soubor uložte a zavřete. Ujistěte se, že program pageant neběží a poklepáním na nově vytvořený soubor můžete ověřit, že vše funguje jak má. Mělo by se zobrazit okno pro zadání hesla (fráze) k privátnímu klíči. (Pokud máte klíčů v souboru více, tak pro každý klíč se okna zobrazí postupně) obrázek
  3. Stiskněte Win + R a do okna které se objeví zadejte shell:startup. obrázek
  4. Klepněte na OK a zobrazí se okno průzkumníka. Do tohoto okna vytvořte zástupce souboru pageant.cmd (např.: přetáhněte soubor pravým tlačítkem a zvolte Create shortcuts here) obrázek

Tím je zajištěno, že se vám program pageant spustí po každém startu počítače automaticky. Pokud v budoucnosti budete potřebovat přidat nebo upravit klíče, které má pageant poskytovat, upravujte pouze soubor pageant.cmd, žádné další kroky již nejsou potřeba.

Linux

V linuxu slouží pro účely agenta program ssh-agent. V závislosti na vaší distribuci a nastavení zajistěte, aby program ssh-agent byl automaticky spuštěn po startu. Klíče se do agenta přidávají příkazem ssh-add. Pro detaily, prosím, konzultujte manuálové stránky nebo web.