Intro('Protokol ssh je dnes naÜt∞stφ celkem populßrnφ a ₧e by se n∞kdo vzdßlen∞ p°ihlaÜoval k unixov²m poΦφtaΦ∙m telnetem, ani₧ by k tomu m∞l dobrΘ d∙vody, se snad ani nestßvß. P°esto mßm pocit, ₧e v∞tÜina u₧ivatel∙ o mnoha u₧iteΦn²ch vlastnostech ssh nevφ, a naopak n∞kterΘ problΘmy podce≥uje - Φastß je neoprßvn∞nß d∙v∞ra v bezpeΦnost ssh p°i p°ihlaÜovßnφ z nebezpeΦn²ch stanic. V prvnφm dφle pravd∞podobn∞ trojdφlnΘho serißlu se podφvßme, jak si zp°φjemnit prßci a zv²Üit bezpeΦnost s pomocφ jin²ch autentizaΦnφch metod, ne₧ \"password\" a na \"sh\" klienty pro platformy, kde ssh nezarostlo do \"zßkladnφ instalace\". Druh² dφl by se m∞l zab²vat odstra≥ovßnφm ftp s pomocφ ssh, neboli scp a sftp. V poslednφm pokraΦovßnφ se zam∞°φme na tunelovßnφ port∙, oken, budovßnφ potrubφ a problΘmy s ssh a ·toky.');
Ssh (secure shell) byl p∙vodn∞ vytvo°eno Tatu Yl÷nenenem jako program, kter² m∞l nahradit nezabezpeΦenΘ klasickΘ
unixovΘ remote- utility rlogin, rsh, rcp. Rychle si zφskal popularitu, "n∞co takovΘho" bylo nutn∞ pot°eba, ssh m∞l otev°enou licenci a jeho pou₧itφ bylo °ßdov∞ jednoduÜÜφ, ne₧ t°eba ssl telnet. Z°ejm∞ dφky ·sp∞chu se p∙vodn∞ otev°enß licenΦnφ politika postupn∞ uzavφrala, a₧ se z SSH a p°edevÜφm kompletn∞ novΘ verze protokolu SSH2 stal vφcemΘn∞ komerΦnφ produkt, vyvφjen² firmou SSH Communications.
NaÜtestφ se ukßzalo, ₧e p°ejφt na uzav°en² k≤d z otev°enΘho, a "zav°φt" jednou osvobozen² program do n∞jakΘ tΘ krabice, nenφ tak jednoduchΘ - u₧ivatelΘ si SSH vzφt nenechali. V mate°skΘm nßruΦφ OpenBSD vzniklo OpenSSH, voln∞ Üi°itelnΘ pod licencφ typu BSD (struΦn∞ °eΦeno, s k≤dem je mo₧no Φinit vcelku cokoli komerΦnφho, nekomerΦnφho, otev°enΘho i uzav°enΘho a publikovat jej dßle pod jakoukoli licencφ). OpenSSH dnes jasn∞ p°evlßdß. Protokol SSH mß dv∞ zßsadnφ odliÜnΘ verze SSH1 a SSH2. Verze jsou sice nekompatibilnφ, ale OpenSSH bez problΘm∙ zahrnuje ob∞, tak₧e rozdφl nenφ na prvnφ pohled p°φliÜ patrn². Popisovat budeme SSH1, proto₧e je jedoduÜÜφ.
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Navß₧e se tcp spojenφ (server standardn∞ poslouchß na portu 22) </UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Server se p°edstavφ (nap°. jmenuji se SSH-1.99-OpenSSH_2.9p2, hovo°φm SSH2, atp.) </UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Klient se p°edstavφ (nap°. SSH-2.00-OpenSSH_2.9p2...) <br></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Pokud n∞kterß strana zjistφ, ₧e by si nerozum∞li, spojenφ
ukonΦφ<br></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Autentizace serveru
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Server poÜle sv∙j hostkey (trval² ve°ejn² RSA klφΦ), povφdanφ o tom, co vÜechno umφ a kolßΦek (hezky Φesky)<br></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Server poÜle sv∙j server key (RSA klφΦ generovan² v pravideln²ch intervalech, nap°. jednou za hodinu)<br></UL>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Klient poÜle zaÜifrovan² sessionkey, poÜle povφdßnφ o tom, jak se bude Üifrovat, a vrßtφ kolßΦek <br></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> V tom okam₧iku ob∞ strany zaΦnou Üifrovat. (b∞₧n∞ nap°. idea, DES, 3DES, blowfish)<br></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Klient se autentizuje. Ssh podporuje n∞kolik metod ov∞°enφ identity u₧ivatele, nap°φklad heslem, OTP, trojhlavΘho psa Kerbera, s pomocφ kartiΦek SecuID. Pro nßs asi nejzajφmav∞jÜφ mo₧nosti je RSA autentizace. V SSH2 byla nahrazena DSA autentizaci, ale proto₧e z hlediska pou₧itφ se metody neliÜφ, popφÜeme jen RSA. Vygenerujφ se dva klφΦe - privßtnφ, kter² u₧ivatel st°e₧φ jako oko v hlav∞ na bezpeΦnΘm
poΦφtaΦi a ve°ejn², kter² naopak m∙₧e bez obav nahrßvat na servery, proti nimz se chce autentizovat.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Klient nabφdne metody autentizace a na RSA se se serverem dohodnou <br></UL>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Server u₧ ale sprßvnΘ ve°ejnΘ klφΦe mß, porovonß je s tφm, co zaslal klient a p°φpadn∞ pokus zamφtne<br></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Server vygeneruje v²zvu a zaÜifruje ji ve°ejn²m klφΦem klienta<br></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Klient v²zvu rozÜifruje, pokud to umφ :-), a spoΦφtß z nφ a n∞jak²ch ob∞ma stranßm spoleΦn²ch informacφ, zalo₧en²ch na kolßΦku, hash<br></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Hash poÜle serveru, ten ji porovnß a klienta ·sp∞Ün∞ autentizuje <br></UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Dßle - se spustφ shell? Kdepak, ssh toho umφ vφc, tak₧e klient jeÜte musφ formulovat, co po serveru chce - mimo jinΘ m∙₧e chtφt
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> SpuÜt∞nφ shellu a p°echod do interaktivnφho re₧imu</UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Pak probφhß spojenφ, kterΘ Φasem skonΦφ. Popis by sice byl zajφmav² (i z bezpeΦnostφho hlediska, bezpeΦnΘ ukonΦenφ styku je velmi d∙le₧itΘ!), ale ne a₧ tak zajφmav². Snad jen, ₧e ssh se dokß₧e vzdorovat i dosti nep°φznivΘmu sφ¥ovΘmu poΦasφ, je asynchronnφ a v interaktivnφm re₧imu posφlß data zajφmav²m zp∙sobem - co stisk klßvesy, to packet. Spojenφ je vzhledem k Üifrovßnφ dob°e zabezpeΦeno proti "ukradenφ" t°etφ stranou a odposlechu. SSH1 nenφ p°φliÜ zabezpeΦeno proti man-in-the-middle ·toku.
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> uvedenΘ p°φklady a jmΘna soubor∙ jsou z OpenSSH na FreeBSD, v jin²ch implementacφch se mohou mφrn∞ liÜit. V serverech pro Win se mohou zßsadn∞ liÜit.</UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
V p°φpad∞ RSA autentizace ssh spojenφ se vzßcn∞ pojφ bezpeΦnost s pohodlnostφ. Pokud mßme n∞jak² "bezpeΦn² poΦφtaΦ", nap°φklad desktop za firewallem, ze kterΘho vzdßlen∞ p°istupujeme k vzdßlen²m server∙m, s jednφm RSA klφΦem vystaΦφme pro vÜechny poΦφtaΦe a hesla m∙₧eme zapomenout. Nebo napsat na papφrkym a ulo₧it do trezoru. Na klientu si vygenerujeme pßr klφΦ∙ n∞Φφm jako
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<SPAN Class=CODE> ssh-keygen
<br>ssh-keygen -d #pro DSA
</SPAN>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
V²sledkem jsou dva soubory, b∞₧n∞ identity a identity.pub. Pak staΦφ jen dostat ve°ejn² klφΦ, tedy obsah souboru identity.pub, na poΦφtaΦe, kam se chceme p°ihlaÜovat. Pokud jsme dosud pou₧φvali hesla, m∙₧eme k tomu pou₧φt p°ibli₧n∞
P°i p°φÜtφm p°φhlßÜenφ u₧ nemusφme zadßvat heslo, resp. musφme zadßvat heslo k RSA klφΦi, ale ne k vzdßlenΘmu systΘmu.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<i> D∙le₧itß poznßmka - zde pozor na verze! V SSH2 se pat°iΦnΘ soubory jmenujφ nap°φklad id_dsa, id_dsa.pub a authorized_keys2, a p°i vyvß°enφ klφΦ∙ je pot°eba ssh-keygen upozornit, aby generoval DSA klφΦe. Servery jsou v∞tÜinou nakonfigurovanΘ tak, ₧e pokud server i klient umφ SSH2, pou₧ijφ jej. U jednou navßzanΘho spojenφ ale nenφ ₧ßdnß mo₧nost nßvratu k p°edchozφ verzi protokolu, RSA autentizace nenφ v SSH2 podporovßna a pokud jste si vygenerovali RSA klφΦe, DSA autentizace se nezda°φ a v∞tÜinou dojde k fallbacku na "password". </i>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Pokud se chceme zbavit i otravnosti s heslem klφΦe, mßme v zßsad∞ dv∞ mo₧nosti. Pou₧φvat nezaÜifrovan² soukrom² klφΦ - n∞kdy je to celkem dob°e mo₧nΘ, pokud t°eba na dosti zabezpenΘm poΦφtaΦi pracujeme sami a dostat se k souboru s privßtnφm klφΦem je pro ·toΦnφka p°esn∞ stejn∞ slo₧itΘ, jako pozm∞nit vlastnφ ssh. Druhou mo₧nostφ je program ssh-agent, kter² si rozÜifrovanΘ verze klφΦ∙ umφ nacachovat. Spustφme-li nap°φklad
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<SPAN Class=CODE> ssh-agent startx</SPAN>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
X session tφmto zp∙sobem, a pak kdekoli uvnit° p°idßme do cache soukrom² klφΦ,
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<SPAN Class=CODE> ssh-add </SPAN>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
bude k disposici kterΘmukoli programu v rßmci x-session. TakΘ je mo₧nΘ inforamci o b∞₧φcφm ssh-agentovi p°edßvat program∙m nastavenφm prost°edφ, blφ₧e viz manulßlovß strßnka.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
A to je vÜe, zadßvßnφ hesel je konec. Jen pro inspiraci - vedle ikonky xtermu je mo₧nΘ si na pracovnφ plochu umφstit nap°φklad ikonky "shell na poΦφtaΦi x", "shell na poΦφtaΦi y", spuÜt∞jφcφ v xtermu "ssh x", "ssh y". JinΘ ikonky mohou nΘst jinΘ specifickΘ p°φkazy - "ssh x prikaz", poklepßnφm pak m∙₧eme nap°φklad vzdßlenΘ poΦφtaΦe vypφnat, nutit k navazovßnφ ppp spojenφ, spouÜt∞t mp3, opΘkat topinky a podobn∞. VÜe dob°e zabezpeΦeno.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
K zadßvßnφ p°φkaz∙ a mo₧nΘmu pou₧itφ p°i stavb∞ potrubφ se jeÜt∞ vrßtφme, stejn∞ jako problΘm, kterΘ RSA autentizace p°inßÜφ, a p°φpadn∞ v²hodn∞jÜφmu pou₧itφ RSArhost.
Jen menÜφ poznßmka - ssh p°edchßzφ i r∙zn²m ip- a dns- spoofing ·tok∙m. P°i prvnφm p°ipojenφ k n∞jakΘmu serveru nßs klient upozornφ, ₧e hostkey serveru dosud nenφ v databßzi d∙veryhodn²ch stroj∙ a nabφdne p°idßnφ. Pokud by se p°i n∞kterΘm dalÜφm p°ihlßÜenφ hostkey servu zm∞nil, ssh klient nßs op∞t bu∩to hlasit∞ upozornφ, nebo spojenφ v∙bec zruÜφ. Nejv∞tÜφ hrozbu by komunikace s ·toΦnφkov²m serverem p°edstavovala samoz°ejm∞ p°i autentizaci heslem, s RSA/DSA klφΦi se m∙₧eme cφtit bezpeΦn∞ji. Za b∞₧nΘho provozu se hostkey nemß d∙vodu m∞nit a zm∞na by m∞la vyvolat maximßlnφ obez°etnost.
Na r∙zn²ch unices a unix-like systΘmech je ssh dnes asi stejn∞ b∞₧nΘ, jako t°eba bash. Nevφm, zda jeÜt∞ n∞kde jinde, proto se oddφl nejmenuje na "SSH na neunixov²ch systΘmech". Celkem jist∞ nenφ ssh samoz°ejmΘ u Microsoftu. Seznam n∞kter²ch zajφmav²ch nebo znßm²ch implementacφ
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> PuTTY, asi nejpopulßrn∞jÜφ klient pro Windows, alespo≥ v zemφch Φesk²ch. K disposici je i autentizaΦnφ agent a generßtor klφΦ∙.
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> TetraTermCS+ssh. Jako ssh je trochu slabÜφ, terminßlovΘ schopnosti trochu lepÜφ, ne₧ putty. Existuje v ΦeskΘ verzi.</UL>
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
<UL STYLE="margin-right:50px;" Class=LinkItem><LI> Mindterm, asi nejznßm∞jÜφ klient pro Javu. Nespornou v²hodou je mo₧nost spustit ve webovΘm prohlφ₧eΦi - nap°φklad mnoho internetov²ch kavßren ssh pod Windows nemß a stßnhout a spustit program s p°φponou exe u₧ivatel∙m nedovoluje, ale stßhnout a spustit program MS Internet Explorerem v nulovΘ ·rovni zabezpeΦenφ nevadφ. Mindterm je ale docela dobrß aplikace t°eba i do p°φkazovΘ °ßdky.
V nov∞jÜφch IE a NN si p°φmo zde m∙₧ete SSH spojenφ vyzkouÜet. Po otev°enφ strßnky <a target=new href="../atiks.krypta.cz/~jk/mindterm/mindterm.html">http://atiks.krypta.cz/~jk/mindterm/mindterm.html</a> by se browser m∞l zeptat na povolenφ spuÜt∞nφ zmφn∞nΘho Mindterm SSH klienta. Demo je i na oficißlnφch strßnkßch aplikace. Poznßmka - Mindterm je zdarma pro osobnφ, neziskovΘ nebo v²ukovΘ pou₧itφ, za komerΦnφ pou₧itφ je t°eba platit. <a href="../atiks.krypta.cz/~jk/mindterm/LICENSE">Licence</a>.