Úgy gondoltam sokak okulására szolgálhat, ha összeszedek pár trükköt az SSH használatáról. Tudom sok helyen találni a témáról információt, ezért azokat a parancsokat szedem össze egy csokorba amiket napi munkám során leggyakrabban használok.

 

A leggyakrabban használt parancs.

ssh ipcím vagy gépnév

Ha nem adsz meg felhasználónevet, akkor azzal a felhasználónévvel próbál kapcsolatot építeni, amivel éppen be vagy jelentkezve. Ha más felhasználóval akarsz bejelentkezni a távoli gépre, mint amivel be vagy jelentkezve, akkor a @ előtt meg kell adnod a felhasználónevet.

ssh felhasználónév@ipcím vagy gépnév

Persze gépnevet csak akkor tudsz megadni, ha a gépnevet a DNS fel tudja oldani. 

 

Másik port használata

Aztán van olyan, amikor a távoli gépen nem szabványos 22-es port van beállítva és oda kell kapcsolódnod. Ilyenkor definiálni kell a portot a -p kapcsolóval. A példákban az 1234 portot fogom használni.

ssh felhasználónév@gépnév -p 1234

Érdemes nem szabványos portot beállítani az SSH kapcsolatra. A támadások nagy részét ezzel az egyszerű beállítással meg lehet akadályozni. A beállításokat a /etc/ssh/sshd_config fájlban tudod végrehajtani. Át kell írni a port paramétert, majd újraindítani az SSH démont.

vim /etc/ssh/sshd_config 
Port 1234
sudo service ssh restart

Eztán már csak az 1234 porton keresztül tudsz kapcsolódni.

 

Kulcs használata

Az SSH biztonságossá tételéhez legjobb, ha kulcsot használsz. Ha vannak kulcsaid, akkor minden géphez lehet egyedi kulcsot használni. Ezt a -i kapcsolóval adhatod meg

ssh -i /úvonal/kulcsnév felhasználónév@gépnév

Kulcsot így hozhatsz létre:

ssh-keygen -t rsa -b 2048

A parancs RSA titkosítással 2048 bites kulcsot hoz létre. Adhatsz meg nagyobb értéket is. Ha túl nagy értéket adsz meg, akkor a kapcsolat lassabban jön létre, mert a titkosítás hatványozottan bonyolultabb lesz. A kulcs létrahozásakor érdemes jelszót megadni. Ez a jelszó védi a privát kulcsodat. Ha elvesztenéd, vagy ellopnák, akkor a támadónak meg kell fejtenie a kulcsot védő jelszót. Adj meg valami hosszú és bonyolult jelszót. Persze ha sima üres entert ütsz, akkor is fog a kulcs működni, de akkor a kulcsodat semmi sem védi az elvesztés ellen. Ha megadsz jelszót, akkor kapcsolódáskor a gép be fogja kérni tőled a kulcsot védő jelszót.

Ha valaki számára készítesz kulcsot, akkor használd a -C paramétert. Érdemes ilyenkor a kulcs fájl nevét és útvonalát is megadni.

ssh-keygen -t rsa -b 2048 -C "valakinek_a_neve"

Létrejön a .ssh mappában egy id_rsa és egy id_rsa.pub fájl. A pub végű a publikus kulcsod annak a tartalmát kell berakni a távoli gépen lévő ~/.ssh/authorized_keys fájlba, hogy a távoli gép elfogadja a kulcsodat. A másik kulcs a titkos (privát) kulcsod. Azt soha ne add át, és ne küld el sehová. Ha vinni kell, akkor inkább pendriveon keresztül tedd meg és lehetőleg legyen erős jelszóval védve.

A kulcsos autentikáció azért jó, mert jelszó nélkül is tudsz kapcsolódni azokhoz a gépekhez, ahová a publikus kulcsod fel van másolva.

A publikus kulcsodat a távoli gépre egy egyszerű paranccsal másolhatod fel:

ssh-copy-id felhasználónév@gépnév

A parancs a távoli gépen a ~/.ssh/authorized_keys fájlba belerakja a publikus kulcsodat. Aztán ha az SSH beállításaidnál letiltod a jelszavas bejelentkezést és engedélyezed a kulccsal történő bejelentkezést, akkor csak azok fognak tudni belépni a gépedre, akiknek van érvényes privát kulcsa. Te viszont a kulcsoddal jelszó nélkül be tudsz jelentkezni a távoli gépedre. A beállításokat szintén a /etc/ssh/sshd_config fájlban tudod végrehajtani.

PubkeyAuthentication yes
PasswordAuthentication no

Ezek a kulcsok egyszerű szöveges fájlok. Bárhogy átmásolhatnád egy másik gépre. Ha kinyomtatod és a másik gépen az ~/.ssh/authorized_keys fájlba billentyűről bepötyögöd akkor is működni fog. Ha képernyőn keresztül kivágod és a másik gépen beilleszted egy szövegszerkesztőbe és elmented az authorized_keys fájlba, akkor is működni fog.

Másik kulcs használata a kapcsolódáshoz

Az SSH parancsban a -i paraméterrel megadhatod egy másik kulcsfájl helyét. Ilyenkor az SSH bejelentkezéshez a megadott kulcsot fogja használni,

ssh -i /útvonal/kulcsfájl felhasználónév@otthonigép

 

Pár szó az SSH szerver konfigurációjáról

Az ssh szervert az alábbi paranccsal telepítheted.

sudo apt-get install openssh-server

A beállításokat a /etc/ssh/sshd_config fájlban szerkesztheted. Kiemelnék pár érdekes sort a beállításokból. Ez nem egy teljes konfig! Csak az érdekesebb részeket szeretném neked bemutatni.

A port amin keresztül az SSH szerver fogadja a kapcsolatokat:

Port 1234

Megadhatod, hogy melyik IP címekről fogadjon el kapcsolatokat a szerver. Például beállíthatod, hogy csak a belső hálózat felől, vagy csak egy bizonyos ip címről érkező kéréseket szolgáljon ki. Megadhatsz IP címet, portot, gépnevet.

#ListenAddress 0.0.0.0

Melyik SSH protokollt használja. Régebbi gépeken még előfordulhat, hogy nem a 2-es protokollt használja. Lehetőleg a 2-es protokollt használd!

Protocol 2

Sikeres bejelentkezéshez szükséges idő

LoginGraceTime 120

Root bejelentkezés letiltva. A root bejelentkezést biztonsági okokból érdemes tiltani. Ubuntunál csak akkor működik, ha a root-nak van jelszava.

PermitRootLogin no

Csak a felsorolt felhasználókkal lehet belépni. Vesszővel elválasztva több felhasználó is megadható.

AllowUsers user1,user2

RSA kulcs használata engedélyezve.

RSAAuthentication yes

Kulcs alapú azonosítás engedélyezve. Ez kell ahhoz, hogy kulcsot tudjál használni.

PubkeyAuthentication yes

Üres jelszó nem engedélyezett.

PermitEmptyPasswords no

Jelszó alapú bejelentkezés tiltása. Ha ezt yes-ről no-ra állítod, akkor jelszóval nem lehet bejelentkezni csak kulccsal.

PasswordAuthentication no

Programok grafikus felületének átirányításának engedélyezése. Később lesz még róla szó.

X11Forwarding yes
X11DisplayOffset 10

Létezik még számos további konfigurációs paraméter, amire itt most nem szeretnék kitérni. Ha ennél többre vágysz, akkor nézegesd a man oldalakat.

 

Port forward

Gyakran előfordul olyan helyzet, hogy el kell érjél egy távoli gépet, ami közvetlenül nem érhető el, csak egy másik gépen keresztül. Ilyenkor jön jól a port átirányítás ssh-n keresztül. A példákban a cél hálózat 192.168.100.0/24.

Mi van akkor, ha van egy router amire az Internet felől nem lehet belépni, de a router mögött van egy szerver amit kívülről el tudok érni SSH kapcsolaton keresztül. Ez a szerver a www.domain.hu néven elérhető és az SSH a 1234 portra van beállítva. Íme a parancs.

ssh -L 8888:192.168.100.100:80 felhasználó@www.domain.hu -p 1234

Egy kis magyarázat. Meghívom az SSH-t. Az -L kapcsolóval a helyi gépemnek (amin dolgozok) a 8888-as portját átirányítom a távoli gépre amit el akarok érni, ez a távoli gép a router aminek a belső lába az 192.168.100.100-as ip címen van. Az admin felület pedig ezen a címen a 80-as porton (tehát http-n keresztül) érhetem el. (A belső hálóról ezt az admin felületet így hívnám meg. Beírnám egy böngészőbe http://192.168.100.100 és máris csatlakoznék az admin felülethez.) A parancs végén meg kell adni, hogy ezt az átirányítást milyen gépen keresztül fogom megtenni. Itt kell megadni, hogy csatlakozzon az SSH felhasználóval ahhoz a szerverhez amit kívülről elérek, ami jelen esetben a www.domain.hu . A -p paraméterrel megadom, hogy a szerver 1234-es portjára csatlakozzon. Mivel a www.domain.hu gép a 192.168.100.100 "mögött" van, ezért "látja" a 192.168.100.100 ip címet és el is éri annak a 80-as portját.

A parancs először létrehoz egy SSH kapcsolatot a www.domain.hu szerver 1234 portján keresztül, majd a helyi gép 8888-as portját a www.domain.hu szerveren keresztül továbbítja a 192.168.100.100 cím 80-as portjára. Innen már egyszerű a dolgunk. Be kell írni a gépen amin dolgozunk a böngészőbe hogy http://localhost:8888 és láss csodát, megnyílik a távoli router admin felülete. Ugyanis a böngésző kapcsolódik a gép lokális 8888-as portjára, amit a www.domain.hu-n keresztül átirányítottunk SSH kapcsolattal a távoli szerverre amin keresztül a belső hálózatán lévő 192.168.100.100 IP cím 80-as portja elérhető. A localhost:8888 meghívására azonnal a távoli gép 80-as portja fog felelni.

Ezzel a módszerrel ha csak egy SSH-val elérhető gépünk van egy távoli hálózaton, a teljes távoli hálózat összes szolgáltatása elérhetővé válik számunkra. Gondolj csak bele. Csak egy SSH-t hagysz nyitva és a teljes hálózatod elérhető. Aranyos mi?

 

Korlátozott Internet elérés megoldása.

Mi van akkor, ha a munkahelyünkön letiltották bizonyos oldalak elérését? Internet van, tehát minden van. Be kell állítani az otthoni gépünket, hogy SSH-n elérhető legyen. Ebben az esetben a helyi gépen úgynevezett dinamikus port átirányítást kell csinálni.

ssh felhasználónév@otthonigép -D9999

Magyarázat. Kapcsolódok SSH-val az otthoni gépemre ami SSH-n keresztül elérhető az Internet felől és a helyi 9999-es porton (bármi más portot használhatsz) bejövő kapcsolatokat átirányítom rá. Eztán a böngészőben be kell állítani, a SOCKS proxy-t a 9999-es portra. (Ezt keresd meg a böngésződ hálózati beállításai közt) Ennek eredményeképpen a böngésződben minden kérés átmegy a 9999-es porton keresztül az otthoni gépedre. Ugyebár otthon nincs letiltva semmi, tehát el fogsz érni bármit amit akarsz. Persze a hálózaton látni fogják, hogy felépült egy titkosított kapcsolat az otthoni géped felé és annak ellenére, hogy nem látják milyen adatforgalmat bonyolítasz, láthatják az átvitt adatmennyiséget. Létezik olyan hálózat védelmi eszköz, ami képes detektálni, hogy az így felépített kapcsolatok valójában mit takarnak. Úgyhogy csak óvatosan! :)

 

Program futtatása távoli gépen

Az SSH parancs végén megadhatod, hogy milyen parancs fusson le. Ilyenkor nem marad az SSH bejelentkezve, csak belép, lefuttatja a parancsot, majd a parancs kimenetét megjeleníti a terminálodban. 

ssh felhasználónév@otthonigép parancs

 

Program grafikus felületének átirányítása

Mi van akkor, ha egy távoli gépen lévő program grafikus felületét szeretnéd meghívni. Linux alatt ez is lehetséges. Mindössze a -X paraméterrel kell meghívni az SSH-t

ssh -X felhasználónév@otthonigép

Aztán gépelj be a terminálba egy parancsot, ami a távoli gépen telepítve van. Pl gnome-calculator. A program a távoli gépen nyílik meg, de a grafikus kimenet a te gépeden fog megjelenni. Pl begépeled, hogy firefox és a böngésző a távoli gépen fog futni. Simán Internetezhetsz rajta úgy, mintha otthon lennél. Ezt csináld meg Windowszal! Hehe! :) Még csak port forward sem kell, és simán böngészgethetsz az otthoni gépeden.

Hosszan sorolhatnám még, mert se vége se hossza a lehetőségeknek és azok kombinációinak. Például fájlmásolás távoli szerverre scp segítségével. Ha még eszembe jut valami hasznos, akkor updatelem a cikket.