| SSH |
|
|
|
| Written by Andrej Elias |
| Saturday, 26 January 2008 22:20 |
|
Všetky tu uvádzané príklady sú otestované na linuxovej distribúcii Ubuntu. Ak neboli niektoré z funkcií zakázané v konfigurácii ssh daemona, mali by fungovať prakticky na každej distribúcii s OpenSSH serverom. Spustenie príkazu na vzdialenom strojiNiekedy mi stačí na vzdialenom stroji spustiť jeden jediný príkaz (reštart DHCP, firewallu,...). V takomto prípade sa nemusím prihlasovať do konzoly. SSH v tomto prípade vykoná operáciu a odpojí sa zo servera. Výhodou je, že sa napríklad nemôžem zabudnúť odhlásiť, čo by napríklad v prípade spojenia na firewall predstavovalo veľké bezpečnostné riziko. u1@PC1:~$ ssh u2@PC2 'mkdir skuska' V prípade že chcem vykonať operáciu, ktorá vyžaduje rootovské práva, použijem príkaz sudo: u1@PC1:~$ ssh u2@PC2 'sudo /etc/init.d/dnsmasq restart' V tomto prípade však je jeden veľký problém - v treťom riadku si príkaz sudo pýta heslo užívateľa u2, ale nemá vypnuté echo, takže heslo je v konzole viditeľné! Riešenie je v použití parametra -t. u1@PC1:~$ ssh -t u2@PC2 'sudo /etc/init.d/dnsmasq restart' a už je všetko ako má byť. Prihlásenie bez hesla...Niekedy je vhodné (prípadne žiadúce), aby nebolo potrebné zadávať heslo pre prihlasovanie cez SSH. Takýto prípad môže nastať ak chcem na jednom počítači zautomatizovať vykonávanie úloh, ktoré vyžadujú pripojenie k ďalšiemu počítaču. Samozrejme, zabezpečenie musí byť. Pre takýto prípad umožňuje SSH autentifikáciu pomocou kľúča. u1@PC1:~$ ssh-keygen -t rsa Teraz potrebujem verejnú časť kľúča nahrať na druhý počítač (PC2). Pre zjednodušenie použijem priame spustenie príkazov cez ssh: u1@PC1:~$ ssh u2@PC2 mkdir -p .ssh Prvým príkazom vytvorím adresár .ssh v domovskom adresári užívateľa u2 na serveri PC2. Ak som sa ešte z PC1 na PC2 nepripájal, ssh klient ma upozorní že ide o neznámy server. Zadaním "yes" pridám jeho identifikáciu do zoznamu známych serverov a v budúcnosti sa už táto hláška nezobrazí. Druhým príkazom pridám svoj verejný kľúč do zoznamu autorizovaných kľúčov na serveri PC2. u1@PC1:~$ ssh u2@PC2 ... a som prihlásený bez hesla... Jeden port to zvláda...SOCKS proxyAk ssh klient umožňuje dynamické presmerovanie portov (Dynamic Port Forwarding), môžeme ssh použiť aj na vytvorenie SOCKS proxy servera. u1@PC1:~$ ssh -D 8080 u2@PC2 otvorí sa štandardná ssh konzola, pričom ssh klient vytvorí SOCKS server na lokálnom stroji (PC1). Tento server bude načúvať na zadanom porte - v našom prípade 8080.
{mosimage}netstat musíme spustiť v druhej konzole lokálneho PC.
Ak si teraz na PC1 napr. vo Firefoxe nastavíme pripojenie cez SOCKS proxy (SOCKS host: 127.0.0.1 port: 8080), tak všetka komunikácia cez Firefox bude kryptovaným tunelom prenášaná cez PC2 (komunikácia PC2 s ostatnými servermi však už týmto kryptovaná nebude). Tento spôsob je vhodný použiť napríklad pre pripájanie sa cez nedôveryhodných poskytovateľov (WiFi hotspot a pod.) hlavne v prípade že cieľový www server nepodporuje SSL (https) prístup. Jediné čo poskytovateľ v takomto prípade uvidí je to, že dochádza ku kryptovanému prenosu dát medzi PC1 a PC2. Lokálne presmerovanie portovLokálne presmerovanie portov (Local Port Forwarding) znamená, že sa na lokálnom stroji (PC1) vytvorí socket, ktorý načúva na danom porte a všetku komunikáciu presmerováva na zvolený port druhého stroja (PC2). u1@PC1:~$ ssh -L 1234:127.0.0.1:80 u2@PC2 Predpokladám, že na PC2 beží http (www) server na porte 80. Povedzme že je na tomto počítači webová aplikácia, ktorá nemá byť dostupná zo žiadneho iného PC, takže server načúva len na localhost spojenia. S použitím uvedeného príkazu môžem pristupovať na túto aplikáciu aj z PC1. Stačí do prehliadača zadať adresu: http://localhost:1234/ Vzdialené presmerovanie portovVzdialené presmerovanie portov (Remote Port Forwarding)
Uvažujme situáciu ako v predchádzajúcom prípade (http server na PC2) s tým, že ja sedím pri PC2 a kolega, ktorý pracuje na PC1, potrebuje na chvíľu pracovať s mojou www aplikáciou. Týmto príkazom sa pripojím na jeho počítač a vytvorím presmerovanie. Kolega zadá do prehliadača http://localhost:10000/ a môže pracovať. Kombináciou local a remote port forwardingu môžeme získať prístup k službám serverov, ktoré sú pre priame spojenie nedostupné (napr. blokované firewallom)... Spustenie grafickej aplikácie zo vzdialeného strojaSSH umožňuje aj tzv. X11 forwarding. V tomto prípade si môžem na obrazovke svojho PC zobraziť a používať grafickú aplikáciu, ktorá je reálne nainštalovaná na druhom PC. Stačí použiť parameter -X u1@PC1:~$ ssh -X u2@PC2 Konkrétny prípad: v práci (PC2) mám na sériovom porte pripojenú špeciálnu sondu a potrebujem s ňou testovať komunikáciu. Z domu (PC1) mám prístup na daný počítač len cez SSH. Takto si spustím sériový terminál v grafickom režime a môžem pracovať... {mosimage}Pri tomto tunelovaní dochádza k pomerne slušným dátovým prenosom - bežne desiatky kB/s no už sa mi stalo že aplikácia využila aj 200kBps. Čím viac sa prekresľuje na obrazovke, tým väčšie dátové prenosy. VNC cez SSHZ času na čas sa potrebujem pripojiť na svoj vzdialený desktop v grafickom režime - používam na to VNC. Ako som už spomínal, forwardovanie portov cez ssh je skvelá a veľmi užitočná vec. Tvorcovia VNC klienta vncviewer mysleli aj na túto možnosť a uľahčili nám týmto prácu: u1@PC1:~$ vncviewer -via u2@PC2 localhost:0 takto sa pripojím bez potreby predošlého vytvorenia tunelovaného spojenia. vncviewer to v podstate urobí za mňa - spustí príkaz "/usr/bin/ssh -f -L 5599:localhost:5900 u2@PC2" na pozadí - a to je náš starý známy Local Port Forwarding. Prenos súborovPri prenose súborov je dôležité, či chceme súbor nahrať na server (upload), alebo si ho chceme zo servera stiahnuť (download). UploadJeden spôsob prenosu súborov sme si ukázali v časi o prihlasovaní bez hesla. Konkrétne tento:
lenže v tomto prípade sa jedná o pridanie dát na koniec súboru - to zabezpečí použitie "dvoch šipiek" >> u1@PC1:~$ cat zdrojovy_subor | ssh u2@PC2 'cat > cielovy_subor'Samozrejme, môžeme plne využiť všetky možnosti linuxového príkazového riadku. DownloadPri downloade súboru zo servera je postup opačný:
Možností uploadu a downloadu je podstatne viac. Je možné napríklad kopírovať adresár zo servera a rovno ho komprimovať do archívu. Pekný prehľad týchto možností je možné nájsť na stránke [5]. Prenos súborov však môže byť aj pohodlnejší a preto spomeniem zopár programov a postupov, ktoré nám umožňujú prenášať súbory cez ssh. Midnight Commandermc zaujal u mňa významné miesto na každom linuxovom stroji. Jeho autori nezabudli ani na shell prístup a tak nám stačí v menu (F9) pre konkrétny panel (Left | Right) vybrať položku Shell link. Zobrazí sa dialóg, do ktorého zadáme prihlasovacie údaje - login a IP/meno cieľového PC. Po potvrdení to môže na prvý pohľad vyzerať akoby sa nič nestalo. No presuňme pozornosť smerom dolu... Teraz už stačí zadať heslo a potvrdiť. V jednom paneli máme lokálne adresáre, v druhom štruktúru vzdialeného stroja. A môžeme kopírovať, editovať, mazať,... Lepšie je raz vidieť než... {gallery}ssh/mc{/gallery} Len pre upresnenie - používa sa tu tzv. FISH protokol (File Transfer Over Shell), ktorý umožňuje prenos súborov cez viacero typov shell pripojení. Nás však momentálne zaujíma len SSH. GNOMEgrafické prostredie GNOME poskytuje pohodlný spôsob kopírovania súborov cez SSH. V menu Places treba vybrať Connect to Server... a zobrazí sa dialóg pripojenia. Ako Service type vyberieme SSH a vyplníme adresu servera, login a meno odkazu (s týmto menom bude vytvorený link na ploche / v menu) Po potvrdení sa vytvorí už spomínaný odkaz na ploche. Stačí naň kliknúť a systém si vyžiada heslo - to si samozrejme môžeme uložiť do keyring-u a hotovo. Otvorí sa nám okno pre prenos súborov medzi serverom a naším PC. {gallery}ssh/gnome{/gallery} KrusaderMnoho ľudí z môjho okolia používa krusader. Rád by som preto pridal návod na pripojenie na SSH cez krusader, ale :) ja krusader nepoužívam. Teda - nainštalovaný ho mám, ale zatiaľ som nenašiel dôvod prečo prejsť od MC. Okrem toho, štandardne v krusaderi SSH spojenia nefungujú. Samozrejme je možné ich rozbehať a pre tých, čo majú záujem, pripájam odkaz: http://www.krusader.org/phpBB/viewtopic.php?p=8897. Veľa šťastia. ZáverNemôžem tvrdiť že som spomenul všetky možnosti SSH - nebola by to pravda. Zameral som sa na tie, ktoré najčastejšie využívam. Ak to niekoho zaujalo, odporúčam pozrieť sa na uvedené stránky. Veľmi prehľadne a zrozumiteľne má problematiku Port Forwardingu vysvetlenú Jaroslav Imrich aka jariq. Odkazy[1] http://en.wikipedia.org/wiki/Ssh[2] http://www.openssh.org/ [3] http://www.jariq.sk/item-15.html[4] http://www.csua.berkeley.edu/~ranga/notes/ssh_nopass.html[5] http://ultra.ap.krakow.pl/~bar/DOC/ssh_backup.html [6] http://en.wikipedia.org/wiki/FISH_protocol [7] http://cvs.savannah.gnu.org/viewvc/mc/mc/vfs/README.fish?view=markup Článok bol publikovaný aj na serveri |
| Last Updated on Saturday, 19 June 2010 11:36 |



Secure Shell, aka SSH, sa stal neodmysliteľnou súčasťou môjho života. Zo začiatku som SSH bral len ako skvelú náhradu nezabezpečeného telnetu. Bol to proste ďalší stupeň evolúcie. Dnes viem že SSH nie je len na rýchle zmeny v príkazovom riadku vzdialeného servera...