SSH – přihlašujeme se bez použití hesla

,

Pokud se často připojujete prostřednictvím protokolu SSH na unixové servery, tak jste již určitě přemýšleli, jak připojení na server zjednodušit. Neustálé zadávání hesla, které se někam přenáší není ani pohodlné a ani bezpečné. Řešením je autentizace za použití SSH klíče!

Praktická část tohoto článku je přizpůsobená pro uživatele MS Windows.

Co jsou to SSH klíče a jak to funguje

Používání SSH klíčů je bezpečný způsob autentizace ke vzdálenému serveru. Každý uživatel má k dispozici dva klíče – veřejný a soukromý. Veřejný klíč (public) nahrajeme na vzdálený server a soukromý (privátní) si necháme u sebe na lokálním stroji.

Svůj soukromý klíč nikdy nikomu nesdělujte. Je to totéž, jako byste někomu prozradili své heslo. Naproti tomu veřejný klíč můžeme sdělit každému, protože se z něj nedá soukromý klíč odvodit. Můžeme jej tedy defacto volně šířit po internetu.

Autentizace přes SSH klíč
1. Autentizace SSH klíčem zjednodušeně

Autentizace probíhá následovně:

  1. klient požádá o připojení k serveru,
  2. server vygeneruje náhodná data a zašle je klientovi,
  3. klient podepíše tyto data pomocí soukromého klíče a pošle je zpět na server,
  4. server podepíše náhodná data z bodu dva veřejným klíčem a porovná je s podepsanými daty přijatých z klientské stanice

Jak vygenerovat klíče

Pro vytvoření vlastních klíčů můžeme použít konzoli nebo program PuTTYgen. Generování klíčů přes příkazový řádek je podrobněji popsáno ve článku Generating Your SSH Public Key.

Pro uživatele pracující v systému Windows bude snazší použít program PuTTYgen. Po otevření programu stiskneme tlačítko Generate a pohybujeme náhodně myší dostatečně dlouhou dobu. Pohyby myši program používá pro generování náhodného klíče (dva lidi na světě nejsou schopni udělat stejné pohyby myší). Vygenerované klíče můžeme uložit pod libovolnými názvy, avšak nejvýhodnější je použít doporučené pojmenování klíčů. Veřejný klíč si uložíme jako id_rsa.pub a soukromý klíč jako id_rsa.

Soukromý klíč je ještě výhodné dodatečně zabezpečit. Pokud by totiž došlo k jeho úniku, šel by snadno zneužít pro přihlašování k Vašim serverům. Doporučuji tedy použít netriviální passphrase, který slouží k zašifrování klíče. Ten kdo jej nezná nemůže klíč použít.

Ukázka programu PuTTYgen
2. Ukázka programu PuTTYgen

Jak se připojit ke vzdálenému serveru

  1. Soukromý klíč si uložíme do adresáře C:\Users\WINDOWS_UŽIVATEL\.ssh,
  2. zkopírujeme veřejný klíč na server do souboru ~/.ssh/authorized_keys,
    • jedna řádka je pro jeden klíč (formát řádky: ssh-rsa my-ssh-public-key komentar; viz. ukázka)

    ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEA0erIm3T2CYaK8SVDcAqmKZbqSPMhayARXgWY
    jFQEdUFGMOl0b7XueDw3NfqsSp9OwDJ3vA7raRFE/Cf7O/OGjHg20wQ9zgTMCvTv
    9SNvFLAHT7B/J5m5Ifx24c+F8oxDpLVwU05nmTvAVZ7SXTWosgE2uemmTYY4ns2d
    XkiRNEsPYqTu+ruEckfggEf4Yi51XN4MMC4MVUat4+kr0XiiwBoE6c0DqFsYy8po
    gciT1baMg/D1ISmxKVluNxHPbHUM30x6CCmDUEaT0UtWnoVBCkcrM8lxb9AOmTAx
    UOF7fSJsf/UzI1b6vI+jYeAf0K0lJdh03J9O5HtL4ogig8nY3Q== komentar

  3. připojíme se na vzdálený server příkazem ssh username@hostname.domain

Pokud se vše povedlo, tak budete nejprve vyzváni k zadání passphrase a následně budete moci používat vzdálený server. Tímto se nám podařilo zprovoznit autentizaci pomocí SSH klíče. V této fázi se nám zatím podařilo nahradit přihlašování heslem za přihlašování prostřednictvím SSH klíče. Nezadáváme tedy heslo k uživatelskému účtu na serveru, ale passphrase, která neopouští náš počítač.

Používáme SSH config pod Windows

Na lokálním počítači máme možnost si definovat předpřipravené konfigurace pro připojování ke vzdáleným serverům. Toto je výhodné, pokud se přihlašujeme ke většímu množství serverů – často se liší například port otevřený pro přihlašování, uživatelské jméno a IP/hostname. Abychom si nemuseli všechno pamatovat, můžeme si vytvořit konfigurační soubor, kam si všechny tyto informace zapíšeme a odkud si je příkaz ssh umí přečíst.

  1. vytvoříme soubor C:\Users\WIN_UŽIVATEL\.ssh\config,
    • Soubor musí být bez přípony (pro založení takového souboru můžeme použít příkaz touch)
  2. Do souboru config vložíme obsah v následujícím formátu:
    Host hostname.domain alias1 alias2
    Hostname hostname.domain
    User username
    IdentityFile ~/.ssh/id_rsa
  3. Nyní už se stačí k serveru připojit zadáním příkazu: ssh alias1

Za příkazem host na dalších řádkách následují další příkazy, které k danému hostu patří. Pokud chceme mít v SSH configu nastavení pro více serverů, tak mezi jednotlivými konfiguracemi vkládáme prázdný řádek.

Popis základních příkazů

PříkazPopis
HostSeznam aliasů (oddělených mezerami), které chceme používat pro rychlé připojení k serveru
HostnameURL adresa webu nebo IP adresa, ke které se chceme připojovat
UserPřihlašovací jméno
IdentityFileCesta k privátními klíči (pokud se jmenuje id_rsa a je na výchozím místě, tak není třeba specifikovat)
PortNení nutné uvádět, pokud se pro připojování k SSH používá standardní port (22)
ForwardAgentZda přeposílat připojení k agentovi i na vzdálený server. Povolené hodnoty jsou yes nebo no.
ProxyJumpSpecifikace jednoho nebo více proxy serverů. Použijeme v případě, že se k některému serveru dá připojit pouze z nějakého jiného.

Popis dalších příkazů lze nalézt zde (EN):