Ssh-agent
V prvním povídání o ssh jsme generovali klíče, ale při generování jsme vynechali passphrasi (heslo klíče). Pokud máte privátní klíč (soubor id_dsa) bez tohoto hesla, vystavujete se riziku, že při odcizení klíče má útočník cestu na vaše systémy otevřenou. Pokud chcete mít vyšší bezpečnost, heslo klíče zadejte. Když útočník získá klíč, bez passphrase se stejně nepřihlásí. Jenže tím se zase dostáváme do stavu, že při každém přihlášení místo uživatelského hesla zadáváme heslo klíče. A právě proto existuje ssh-agent.
Ideální je spustit ho hned na začátku, aby všechny další procesy měly přístup k systémovým proměnným, které vytvoří.
Je několik různých způsobů spouštění, z řádky třeba takhle:
$ eval `ssh-agent`
V případě xwindows třeba záleží na distribuci, často je to úpravou xinitrc
souboru.
Tím jen spustíme agenta, příkazem ssh-add
(nebo ssh-add /cesta/k/id_dsa
) přidáme privátní klíč a zadáme heslo klíče. Agent si bude udržovat rozšifrovaný klíč v paměti a v případě potřeby se použije, takže už není potřeba zadávat heslo klíče při přihlášení. Agent může udržovat víc klíčů, po ukončení a znovu spuštění agenta musíme klíče znovu přidat.
openSSH vs. SSH
Minule jsme si ukázali autorizaci klíčem v openSSH, ale můžete potřebovat třeba i kombinaci mezi openSSH komerčního SSH (jak klient, tak i server). SSH2 má několik odlišností v generování a ukládání klíčů. Abych tady neplýtval místem a nerozepisoval všechny kombinace, když už to udělal někdo jiný, odkazuji čtenáře na článek SSH: Convert OpenSSH to SSH2 and vise versa.
Fingerprint
Minule jsem ještě zapomněl zmínit fingerprint a vaše první přihlášení na nějaký server. Pokud se na nějaký server hlásíte poprvé, zobrazí se něco podobného:
[pm@minastirith pm]$ ssh pm@server.nekde.cz The authenticity of host 'server.nekde.cz (99.98.97.96)' can't be established. DSA key fingerprint is 73:9a:24:be:ef:e4:77:aa:a8:94:9b:f2:49:fa:f6:73. Are you sure you want to continue connecting (yes/no)?
Každý ssh server má svůj veřejný klíč, ten si člověk těžko zapamatuje, proto vzniká jeho jednoznačný identifikátor (fingerprint). Je o dost kratší a pro nás použitelnější. Ten si už můžeme někam poznamenat pro kontrolu. Pokud se někam poprvé hlásíme, klient vám zobrazí fingerprint vzdáleného serveru a vy si jej můžete zkontrolovat, jestli je to opravdu on. Klíč serveru si pak můžete uložit a při dalších přihlášeních už se nebude fingerprint objevovat. Stane se tak pouze v případě, že se klíč serveru změní. V tu chvíli byste měli zpozornět – buď správce serveru mohl třeba nainstalovat jinou verzi sshd (a v tom případě stačí jen smazat starý klíč pomocí ssh-keygen -R vzdaleny.server.cz
), nebo už může jít o problém a povídáte si s jiným (nebo napadeným) serverem.
Přenos dat: scp a sftp
Běžně se používá ftp, ale to má nevýhodu v tom, že neprovádí šifrování. Proto vznikl protokol scp a sftp. Začneme s jednodušším, a to je scp. Samo o sobě neautentizuje ani nešifruje, k tomu využívá právě ssh. Použití je téměř stejné jako u příkazu cp. Takto zkopírujeme soubor z našeho stroje na vzdálený:
$ scp soubor uzivatel@stroj:/cesta/kam/
Můžeme zkopírovat i ze vzdáleného stroje na lokální, do aktuálního adresáře:
$ scp uzivatel@stroj:/cesta/k/souboru/soubor .
Podobně pracuje i protokol SFTP. Oproti scp je novější a umí toho více. Namátkou třeba navázat přerušené stahování, nastavování práv,…
V řádce tedy můžete použít scp a sftp, pro vyznavače midnight commanderu klávesa F9, levý nebo pravý panel a položka shell link (v lokalizované verzi shell spojení). Tam jen zadejte uzivatel@host.domena.cz
( nebo uzivatel:heslo@host.domena.cz
) a můžete pracovat se vzdálenými soubory. Toto už bylo probíráno ve starším dílu hrátek.
Pro windows existuje klient WinSCP, ke stažení na winscp.net, já raději používám plugin do Total commanderu. Lze stáhnout na adrese www.ghisler.com/plugins.htm. Když si potom v jednom z panelů zvolíte Síťové okolí, obejví se nová položka Secure FTP Connections
. Tam už si můžete nastavit jednotlivé přístupy.
Jenoduché tunelování
Představte si klasickou síť s firewallem, na který máte přístup jen pomocí ssh pouze na firewall (třeba firewall.firma.cz). Uvnitř sítě je windows server (IP 192.168.1.1) a chcete se na něj připojit vzdálenou plochou. Nejprve přístup z Linuxu:
Vytvoříme si tunel:
$ ssh -N -f -L33089:192.168.1.1:3389 user@firewall.firma.cz
Pak už můžeme vzdálenou plochou:
rdesktop localhost:33089
Takto spuštěný tunel běží na pozadí, takže jej musíme ukončit příkazem kill.
Stejnou věc můžeme provést i z Windows třeba pomocí klienta putty. Nejprve se spojíme na firewall.firma.cz a potom na liště okna dáme pravé tlačítko myši a change settings. V levém menu potom connection → tunnels
a přidáme si tunel dle obrázku. Pak už jen stači spustit vzdálenou plochu na adresu localhost:33089
.
Obrázek ukazuje, jak tunel v putty nastavit. Modře je to, co musíte vyplnit, červeně je výsledek.
Tímto tunelem jsme si zpřístupnili port na vzdáleném počítači na našem lokálním portu. Pomocí parametru -R
můžeme zpřístupnit lokální port na nějaký port vzdáleného stroje. Tunel se nám může hodit třeba i k zabezpečení protokolů, které toto neřeší (pop3, …) O tunelech by se toho dalo napsat hodně, ale více se do dnešního dílu nevejde.