SSH jednoduše

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Tecquilka
Datum: 8.1.2006
Hodnocení/Hlasovalo: 0/0

Chcete se prihlasovat pres ssh bezpecneji ? Jste stale vice paranoidni ? Nebo jste jen lini zadavat heslo ?

Mám zde pro vás jeden návod, jak se připojovat k serveru pomocí ssh, ale bez vyměny skutečných hesel. Před chvílí (v době sepisování tohoto článku) jsem se dodíval na velmi šikovné video z avc.sh.cvut.cz ohledně tunelovaní pomocí ssh, ale o tom možná někdy jindy :-) Velmi mě zaujala část pro líné a přitom paranoidní uživatele.

Pro lidi, kteří "se moc neorientují" udělám malinkatou rekapitulaci, co nejspíš každý, byť okrajově, zaslechl - připojení na server pomocí protokolu ssh (secure shell - bezpečná konzole). Během připojování putuje po internetu strašné množství, na první pohled chaotických dat, které obsahují vaše osobní informace, hesla, či jen příkazy pro správu vašeho vzdáleného serveru, prostě vše, co by jste chtěli mít v bezpečí a v tajnosti. K zabezpečení spojení existuje protokol ssh (linuxový klient "ssh", windows klient např. "putty"), který šifruje celé spojení ... Samotné šífrování rozebírat nebudu, jen popíši navázaní a výměnu klíčů. Pokud se ted divíte nad slovem "klíčů", tak čtete správně. Pro méně znalé existují dva druhy klíčů. První, který nazýváme "privátní", a druhý nazývaný "veřejný." Privátní, který složí k šifrování a dešifrování na straně uživatele (ten si necháme) a veřejný, který pošleme serveru/druhé straně, aby mohl naše data rozšifrovat. Celá komunikace vlastně začíná výměnou klíčů, které jsou pro každý stroj (měli by být) jedinečné. Po výměně klíčů, jsem požádán o zadání hesla, které je posláno tímto, již šifrovaným spojením. Jenže může se stát, že šifře nevěříte, bojíte se, že vám heslo nekdo odkouká či jiné formy “odposlechu” a pak při locálním přihlášení na onen počítač bude mít náš útočník práva onoho uživatele ... Toto lze vyřešit tzv. “důvěryhodnými klíči”, které se nazývají authorized_keys. Jedná se o soubor, který určuje které klíče jsou pro nás (server) bezpečné, a pro ktere mohu bezpečně navázat spojení, i bez znalosti hesla ... Řeknete si: “přeci nekdo můýe odposlechnout náš veřejný klíč”, ale je mu k ničemu, veřejný klíč je generován v závyslosti na privátním, takže server pošle data šifrovaná podle veřejného klíče, ale jen vlastník privátního klíče může ony data rozšifrovat a odpovědět. Toto je zatím vše, co by mělo stačit, pro blížší informace si “popovídejte s panem googlem”, či z avc.sh.cvut.cz stahněte video: “2003_11_15_CF-06-SSH_tunelling.avi” Ještě bych podotkl, soubor authorized keys leží v /home/uzivatel/.ssh/authorized_keys. Zde uvedu obsah meho, ktery mam na serveru:
ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAIEAn7nn/JDKeVzS8oUygnjfCGeDk5B83CksTuL/PCHtDWQNr5jGhoYdMi6kOhY9OSQsbupPpK5ymYdaz07VpPE2Ue5pcZBUckaxog9pcGooBfc7u95Mx0TecVPeFEwggyTEMdO0kG2biVln6G2iA1bNuzA2xhCAGPcoGb5y3BPIs9E=
tecquilka@domov-pc

Ted vám ukáži postup jak vytvořit veřejný a privátní klíč na konzoli:

[tecquilka@doma]$ pwd
/home/tecquilka/.ssh/
#zjistil jsem, kde se nalezam a kam vygeneruji klic
[tecquilka@doma]$ ssh-keygen -t rsa
#timto prikazem vytvorim vlastni sadu RSA klicu a to protokol 2
#behem vytvareni se vas zepta na jmeno souboru, takze napr "klic"
#zadane heslo bude k extra zakryptovani klicu, aby byly nepouzitelne, pri kradezi z disku, bez hesla
[tecquilka@doma]$ ls
klic
klic.pub
#onen "klic" je privatni (nikomu nedat, zalohovat) a "klic.pub" je verejny, ktery distribuji (taky zalohovat)
[tecquilka@doma]$ scp klic.pub tec@server.cz:./.ssh/klic.pub
#timto prikazem jsem odeslal soubor, resp klic na server.cz do domovskeho adresare uzivateli tec, do slozky .ssh na serveru, ale muzu jej take donest rucne, poslat adminovy mailem, či zavolat mu, a vyhlaskovat mu jej :-)


Tak, ted v teto fázi mám svůj veřejný klíč na svém vzdáleném "serveru", ted mi zbýva než nastavit "authorized_keys" tak, aby zde byl i muj klic a pro příště abych nemusel pří připojení zadávat heslo ... Je avšak důležite zkontrolovat, jestli je správně na lokálním PC nastaven ssh tak, aby s mnou vygenerovaným klíčem (privátním) dokázal manipulovat – určit mu kde je (u putty pod win je importovani klicu jednoduche, posledni kolonka, import keys či tak nějak). Také zkontroluji nastaveni deamona sshd na serveru.


SSH KLIENT:
To jest jeho konfigurační soubor: "/etc/ssh/ssh_config", zde musí být nastaveno "IdentityFile ~/.ssh/klic" na náš privatni klíč. Jelikož tento konfigurační soubor obsahuje globální nastavení ssh pro všechny uzivatele, doporučuji si vytvořit klíče s defaultnim jmenem ... Tímto jsem totiž určil, který privatní klíč ma ssh pouzivat. Dale nastavte "Protocol 2,1" čímž nastavíte použití v první řade protokolu v2 pred v1. Pro tento (verze dvě) jsem si vytvořil klíče (dole uvedu tabulku klíčů).

SSHDeamon:
Tento upravuji na straně serveru. To je jeho konfigurační soubor: "/etc/ssh/sshd_config", zde musíte mít povoleno tyto 4 nastavení: "RSAAuthentication yes" "PubkeyAuthentication yes" "AuthorizedKeysFile .ssh/authorized_keys" "RhostsRSAAuthentication yes" "HostbasedAuthentication yes". RSAAuthentication povoluje používání RSA klíčů, pubkey... určuje veřejné klíče, Authorizedkeysfile určuje kde se v homeadresarich má hledat soubor authorized_keys. Poslední parametry take nechte povoleny ...

Ted uvedu zkraceny log z konzole, ale doporučuji pořádně sledovat "kde vlastne jsem prihlášen"

[tecquilka@doma]$ su
#přepnu se do roota, jelikož ten jediný může ony soubory kofigurovat ...
[root@doma]# echo "IdentityFile ~/.ssh/klic" >> /etc/ssh/ssh_config
#přidám do ssh_config dálší řádek, kde má hledat klíče, v defaultu je odkomentovano, pozor musi byt 2x >> jinak při použití jednoho > by doslo k nahrazení, ne pridani do souboru, take lze ale toto provést v hezkém editoru.
[root@doma]# ssh root@server.cz
#připojím se na server jako root
[root@server]# echo -e " RSAAuthentication yes\n PubkeyAuthentication yes\n AuthorizedKeysFile .ssh/authorized_keys\n RhostsRSAAuthentication yes\nHostbasedAuthentication yes" >> /etc/ssh/sshd_config
#dojde k připojení, můžete taky ručně editovat, ale kvůli defaultnímu nastavení a nutnosti zkrátit výpis jsem to udělal takto ... parametr -e u echa umožňuje vkladat odentrovani (to je to "\n" – bílý znak)
[root@server]# cat /home/tec/.ssh/klic.pub > /home/tec/ssh/authorized_keys
#vytisknu veřejný klíč do souboru authorized_keys (přesněji nahradím, vidíte tu jednu “>”).
[root@server]# /usr/sbin/sshd restart
#restart ssh deamona, sice nás to vykopne, ale teď při přihlášení nebude na uživatele tec potřeba zadat heslo tedy maximalne to, ktere jste (mozna) použili/vytvořili při vytváření klíče ...


[tecquilka@doma]$ ssh tec@server.cz
Enter passphrase for key '/tec/.ssh/klic':
Last login: Sun Jan 8 23:09:29 2006 from tecquilka.doma.cz
[tec@server]$


Během tohoto posledního, námi zadaného spojeni není odesláno heslo, k uzivateli tec na počítači "server", ale jen heslo k dešifrování privatniho klíče. Pozor, lze použít jen jako přihlášení k uživateli, který nás má v authorized_keys. Pokud tato metoda selze, pokracuje se normalne prihlasovanim pomoci jmena a hesla ...

Protokol vXPrikazdefaultní jména: privatní/veřejný
1$ ssh-keygen -t rsa1identity/identity.pub
2$ ssh-keygen -t rsaid_rsa/id_rsa.pub
2$ ssh-keygen -t dsaid_dsa/id_dsa.pub