Microsoft Windows 10 (od verze 1803) obsahují vlastního SSH klienta a to včetně agenta pro správu klíčů. Klienta můžeme použít přímo, pokud chceme použít interního agenta, je potřeba další nastavení.

SSH Klient

SSH klienta můžeme použít přímo v CMD nebo lépe PowerShellu. A to včetně klíčů. MS implementoval i ssh-keygen a klíče generuje do ~\.ssh (tj C:/Users/user/.ssh).

V Microsoftu se za poslední roky musely odehrát skutečně velké změny. Dovedete si představit MS SSH klienta tak někdy v roce 2008? Jak by asi vypadal, kde by měl klíče, v jakém formátu apod. Pravděpodobně by bylo vše záměrně nekompatibilní. MS teď prostě vzal OpenSSH z OpenBDS a upravil jej pro Windows.

Pokud nám stačí jen klient, který pochopitelně umí využívat i klíče a nevadí nám před každým použitím zadávat passphrase, je naše práce hotova.

SSH Agent

Pokud ale chceme luxus agenta, musíme zapnout službu, která je ve výchozím stavu Disabled (tj nikoliv jen vypnutá, ale natvrdo zakázaná). Nastavíme ji na Automatic.

Obrázek: Nastavení automatického spouštění služby SSH Agenta

Klíče

Generujeme je pomocí ssh-keygen, např:

ssh-keygen -t rsa -b 4096
ssh-keygen -t ecdsa -b 384
ssh-keygen -t ed25519

Typy klíčů:

  • Klasické RSA klíče generujeme jako 4096b. (2048b jsou považovány za slabé, dnešní doporučení je 3072. Není důvod nezvolit maximum.)
  • ECDSA klíče minimálně 384b (dle doporučení NSA 2016), lze až 512b.
  • ED25519 je velikost klíče nastavena na 256. Měla by být také nejrychlejší.

Osobně se držím klasiky RSA-4096. Eliptické křivky nepovažuji za dostatečně důvěryhodné. Což je téma mimo tento článek. Pokud z nějakého důvodu chcete co nejkratší (ale stále bezpečný) klíč, zvolte ed25519. Jak generování, tak použití je velmi rychlé, což může být výhodné pro slabší stroje.

Potom můžeme klíče přidat pomocí klasického ssh-add. Ale pozor. Je tady zásadní změna proti běžným (linuxovým) agentům. Zatímco běžně si klíče musíme přidat po každém přihlášení, tak tady na Windows se klíč uloží do Security Contextu a už tam zůstane. MS dokonce doporučuje soukromou část klíče z disku smazat.

Má to výhody i nevýhody. Výhoda je, že klíč je okamžitě dostupný po přihlášení se ke svému Windows účtu. A to je současně i největší nevýhoda. Pokud nemáte dobře zabezpečený účet (slabé heslo, povolené jiné přihlášení - otisk, obličej) může snadno dojít ke kompromitaci účtu i klíčů. Proto někteří lidé nepoužívají žádného agenta a passphrase vyplňují pří každém použití klíče.

Sami tedy zvažte, zda se vyplatí si klíč přidávat či nikoliv. Osobně si myslím, že není špatné mít na každém kompu jeden výchozí klíč vložený do agenta (tj user@machine) a na ssh serveru mít důkladný přehled v authorized_keys. Snadno tak můžete zakázat přístup z potencionálně napadeného účtu. A vedle toho mít pár klíčů, které do agenta nikdy nepůjdou a používat je na skutečně závažné použití.

To je obrovská výhoda klíčů, klient jich může mít mnoho, stejně tak na straně serveru je možné jich mnoho povolit.

Nevýhody

Bohužel použití tohoto interního agenta je zatím dost omezené. Neumí jej použít ani Git for Windows. Ten nabízí možnost mít svého vlastního ssh klienta nebo se napojit na Putty Pageant pomocí plink. Takže pokud chceme pracovat na windows s gitem (což má své další nástrahy třeba v podobě nepodporovaných znaků ve jménech souborů), tak musíme nutně použít pageant.

Mimochodem, git pro windows je rozbitý. Pokud vzdálený stroj nemáme v cache, tak git sice zobrazí hlášku o přidání host key do cache, ale tato hláška se nedá potvrdit. Řešením je nejdřív plink host, ten se nás zeptá na potvrzení klíče hosta a až po té funguje Git. (Nevím, jestli se tohle nedá obejít přes Git GUI, to nepoužívám. V terminálu to zkrátka zlobí.)