Távoli munka SSH segítségével

Az SSH, azaz Secure Shell segítségével, ha a szerveren engedélyezve van a belépés a felhasználónknak, és a kliensgépen telepítve van egy SSH kliens program is, akkor parancssoros felületen keresztül beléphetünk és onnantól a munka olyan, mintha eleve a szerveren léptünk volna be parancssoros módban.

Ebben a részben az SSH-ról fogok írni, ami a legalapvetőbb módszer távoli munka céljából. Alapszinten pedig a használatba vétele is nagyon egyszerű.

Tartalomjegyzék

Fapados, de jól faragott

Az első bekezdésben írtak alapján primitív és fapados megoldásnak tűnhet. És bizonyos értelemben az is. Ugyanakkor mégsem.

Tartozik hozzá egy SCP (Secure Copy) protokoll is, illetve a modernebb testvérkéje, az SFTP (SSH FTP), ami az azt támogató kliensekkel úgy használható, mint egy hagyományos kétpaneles fájlkezelő. Csak az egyik oldalon a távoli szerver fájljai vannak, a másikon a helyi gép.

Tehát nem muszáj parancssorban bajlódni vele. Egyes fejlesztői környezetek és adminisztrációs szoftverek is nyújtanak szolgáltatásokat SSH-n keresztül.

Debian linuxon nem igazán merül fel kérdés, hogy mit használjon az ember. Windows klienseken már kevésbé egyértelmű, de több program is létezik, amivel használhatjuk a funkcióit.

SSH szerver Debian 6-on

Telepítés

Debian 6-ra az SSH szervert a következőképpen telepíthetjük rendszergazdaként, ha még nincs fent:

apt-get install openssh-server

Létezik egy metacsomag, az "ssh". Nem tesz mást, mint felteszi az openssh-server és openssh-client csomagokat. Ha utána az ssh csomagot letöröljük, a másik két csomag továbbra is fent marad. A szervert lehet törölni külön, ha viszont az ssh klienst töröljük, azzal együtt a szerver is törlődni fog. Erre érdemes odafigyelni.

A Debian 6 telepítésekor viszont javasoltam az "SSH szerver" telepítését. Így elvileg ez már fent kell legyen. Tehát a kliens is.

Konfigurálás alapok

A szerver beállításait tartalmazó fájl a "/etc/ssh/sshd_config". Ez nem keverendő össze a hasonló "ssh_config" -gal, ami a kliens beállításait tartalmazza! Az opciók neve és értéke egyszerűen szóközzel van elválasztva. Némelyik megjegyzésben van. Ilyenkor az alapértelmezett értéket kapja.

A változtatások érvénybelépéséhez a szerver újraindítása szükséges:

/etc/init.d/ssh restart
Port

Az SSH szerver alapértelmezett portja a 22. A külvilág számára elérhető szerveren ezt szokás megváltoztatni. Ezzel is csökkentve a betörési kísérletek számát. Mivel a kliensen is a 22-es port az alapértelmezett, így csatlakozáskor nem kell a portot megadni. Ha viszont a kliens és a szerver alapbeállításai különböznek, akkor igen. A saját használatú Host-Only virtuális gépünkön ez nyugodtan maradhat 22-es.

ListenAddress

Ez után egy IP címet adhatunk meg, amilyen IP címen elérhető az SSH szerver. A jelentősége abban rejlik, hogy ha több hálózati interfész is van a gépen, amik közül az egyik a külvilág felé nyit, a másik pedig egy belső hálózat felé, akkor a belső hálózati IP címet megadva a külvilág nem léphet be SSH-n akkor sem, ha egyébként a gép elérhető. A belső hálózatból viszont már működik a belépés. A 0.0.0.0 címmel bárhonnan fogad kéréseket. Ez az alapértelmezett. A virtuális gépünkön ezt sem kell módosítani.

PermitRootLogin

Ez alapértelmezetten "yes". Azaz a root felhasználót is be engedi lépni. A root felhasználó belépését ugyan lehet tiltani a

passwd -l root

paranccsal is. Ekkor még egy telepített nyilvános kulcs használatával beléphet. Hogy az mi, arról majd később.

Állíthatjuk az értékét "without-password" -re is. Ekkor hiába van engedélyezve a root felhasználó belépése a gépbe, SSH-n keresztül csakis a kulcsfájl használatával léphet be.

Esetünkben maradhat az értéke yes.

PubkeyAuthentication

Ha ennek az értékét állítjuk "no" -ra, akkor a kulcsfájlt figyelmen kívül hagyja a szerver és amennyiben más akadálya nincs a belépésnek, kéri a jelszót. Maradjon ez is "yes".

PasswordAuthentication

Alapértelmezetten "yes", azaz engedélyezett bárki számára a jelszavas belépés SSH-n keresztül. A root felhasználó belépési jogosultságától függetlenül. Ha viszont "no"-ra állítanánk, akkor minden jelszavas belépést tiltanánk, beleértve a root felhasználót is.

AllowUsers

Ez után felsorolhatjuk azokat a felhasználókat, akiknek joga lesz belépni SSH-n keresztül. Ha általában mindenkinek joga van, de valakit tiltunk, használható a "DenyUsers" opció. Létezik ennek mintájára "AllowGroups" és "DenyGroups" is a csoportok engedélyezésére.

AuthorizedKeysFile

Ez után lehet megadni annak a fájlnak az útvonalát, amibe soronként bekerülnek majd a publikus kulcsok a kulcsalapú bejelentkezéshez. A "%h" is használható benne, ami a tetszőleges felhasználó home könyvtárát jelenti. Majd általában a "/.ssh/authorized_keys" következik. Ez az alapértelmezett.

SSH kliens Debian 6-ban

Telepítés

A klienst tehát a következő módon telepíthetjük, ha a szerverre nincs szükség:

apt-get install openssh-client

Bejelentkezés

Ha a szerveren levő felhasználó neve megegyezik a kliensen levővel, akkor a felhasználónév elhagyásával csak a hosztot megadva így lehet belépni:

ssh 192.168.56.2

Persze az IP helyett lehet domaint is írni.

ssh a22.vm1

Különböző felhasználónév esetén a hoszt elé jön a "felhasználó@":

ssh web@a22.vm1

Ha a kliensen a hosztra vonatkozó alapértelmezett port és a szerver portja különbözik, akkor a portot is meg kell adni:

ssh web@a22.vm1 -p 2246

Ha jelszavas belépés helyett a kulcspárt használnánk, akkor

ssh web@a22.vm1 -i /home/web/.ssh/id_rsa.pub

Ahol az id_rsa.pub a nyilvános kulcsot tartalmazó fájl.

Konfigurálás alapok

A kliens globális konfigurációs fájlja az "/etc/ssh/ssh_config". A beállítások hosztonként adhatók meg. De lehetőség van az összes hosztra érvényes beállításokat megadni. Lehet felhasználóra vonatkozó konfigurációt is készíteni a felhasználó könyvtárában levő .ssh/config fájlban. Ha a fájl nem létezik, csak létre kell hozni.

Host

Ez után kellene a hosztot írni. IP-t vagy domaint. Ha csillag karaktert írunk a helyére, akkor az összes hosztra érvényesek lesznek a következő sorokba írt opciók. Egymás után több hoszt is megadható szóközzel elválasztva.

Port

Az alapértelmezett port, amivel a kliens az adott hosztra megpróbál csatlakozni. Ha eltérő porton figyel az SSH szerver, akkor külön a bejelentkezésnél kell megadni a portot.

PasswordAuthentication

Még ha a szerveren engedélyezve is van a jelszavas belépés, a kliens is megtilthatja. Ha "no" -t írunk utána, akkor a kliens nem fog engedni belépni jelszóval. Csak a kulcspár használatával.

User

Ebben adható meg, hogy a "felhasználónév@" előtag elhagyásakor mi legyen az alapértelmezett felhasználó.

IdentityFile

Kulcsfájlos belépéskor a "-i" opció elhagyható, ha létezik az itt megadott privát kulcsfájl. Lehet fix útvonal, vagy felhasználófüggetlen, ha a "~" jellel hivatkozunk a home könyvtárra:

IdentityFile ~/.ssh/fajlneve

SSH kulcs

Egy nyilvános és egy titkos kulcsot kell elképzelni, melyek gyakorlatilag kódolt szövegek. A titkos kulcsot titokban kell tartani. Valahol a saját kliensgépünkön, ahol más nem fér hozzá. A nyilvános kulcsot pedig egy távoli szerverre kell eljuttatni, ahova majd be szeretnénk lépni jelszó nélkül.

Ennek a kettőnek a segítségével a kliens és a szerver biztonságosan meg tudja beszélni egymással, hogy a felhasználó beléphet-e. Az erre felhasználható publikus kulcsokat a szerveren a felhasználóhoz tartozó "AuthorizedKeysFile" beállításnak megfelelő fájlban találhatjuk soronként.

Kulcsfájlok készítése

Ezt a kliens gépről kell elvégezni. Debian linux kliensen a következő módon:

Generálás egyszerűen

ssh-keygen

Ekkor az alapértelmezett algoritmussal kódolt kulcsfájlok generálódnak, amiknek a nevét megadhatjuk. A titkos kulcsfájl nevét kell megadni. A nyilvános egy ".pub" kiterjesztést kap. Üresen hagyva egy alapértelmezett fájlba generálja a kulcsot. Valamint egy "passphrase" -re is rákérdez a program. Hagyhatjuk ez utóbbit is üresen. A megadásával viszont a titkos kulcsot tudjuk védeni jelszóval.

Ha az alap jelszavas belépést használjuk, a betöréshez elég kitalálni valakinek a jelszavunkat. Ha kulcspáros megoldást, akkor meg kell szerezni a titkos kulcsot is. Ehhez hozzá kell férni a gépünkhöz. Ha viszont az nincs jól védve, akkor a kulcs sem ér sokat. Ha azon van passphrase, az egy kicsit nagyobb biztonságot ad. Persze ezt is megpróbálhatják kitalálni. A teszt virtuális gépünkön nyugodtan elhagyhatjuk.

Paraméterekkel

ssh-keygen -t rsa -b 2048 -f /home/web/.ssh/id_rsa -P passphrase

A "-t" után az algoritmus neve jön. A "-b" után a kulcs hossza bitekben. A "-f" után a privát kulcsfájl útvonala, majd a "-P" után írhatjuk a passphrase-t is. A passphrase-t inkább ne adjuk meg ilyen módon!

Bármelyik paraméter elhagyható. Az algoritmust és a bitszámot ha elhagyjuk, a fenti lesz az alapértelmezett. 768-nál pedig nem is lehet kisebb hosszt megadni.

A teszt virtuális gépen én a paraméter nélküli verziót javaslom. A szükséges lépéseken úgyis végigvezet.

Nyilvános kulcs telepítése

A nyilvános kulcsot fel kell másolni a szerverre. Amennyiben a jelszavas belépés is engedélyezett, könnyű a dolgunk.

ssh-copy-id -i /home/web/.ssh/id_rsa.pub web@a22.vm1

A "-i" után tehát a nyilvános kulcsfájl útvonala kell. Majd az ssh belépéshez szükséges szervercím azzal a felhasználónévvel, akihez a nyilvános kulcsot telepíteni akarjuk.

Ha portot is meg kellene adni, az egy kicsit trükkösebb. A következő módszer hibás:

ssh-copy-id -p 2246 -i /home/web/.ssh/id_rsa.pub web@a22.vm1

Hibaüzenet:

Bad port 'umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys'

Az attribútumok listáját idézőjelbe téve már működik:

ssh-copy-id '-p 2246 -i /home/web/.ssh/id_rsa.pub web@a22.vm1'

Vagy fel lehet venni az "~/.ssh/config" fájlban a hoszthoz tartozó portot előre. Így nem kell külön megadni.

Ha a jelszavas belépés nem engedélyezett, akkor elképzelhető, hogy a rendszergazdának kell eljuttatni a kulcsfájlt, hogy telepítse. Nincs más dolga, mint a fájl tartalmát bemásolni egy új sorba a szerverkonfigurációnál említett "AuthorizedKeysFile" után írt útvonalon található fájlba a megfelelő felhasználóhoz.

A virtuális gépnél viszont most mi vagyunk a rendszergazdák. A fájlt felmásolhatnánk közvetlenül pendrive-ról. Saját, már beállított kulcspáros SSH hozzáféréssel. Lehetne hozzá webes felület is, ahol fel lehet tölteni, vagy akár e-mailbe csatolt fájlként is letölthetjük. A karakterenkénti kézzel átmásolását a célfájlba nem javaslom. De ha valaki nagyon ráér és szereti a kihívásokat... az is inkább máshol keresse! :)

Majd telepítés a web felhasználóhoz:

cat ./id_rsa.pub >> /home/web/.ssh/authorized_keys

Ezután már használható a kulcspáros belépés.

Röviden a lényeg:

# kulcsgenerálás
ssh-keygen
# kulcsmásolás / telepítés
ssh-copy-id -i /home/web/.ssh/id_rsa.pub web@a22.vm1
# belépés
ssh web@a22.vm1

SSH szerver Windows 7-ben

Kicsit kilóg a sorból ez a rész, mert általában linuxra lépünk be SSH-val és az általam összeállított és bemutatott virtuális gép is Debian 6 linuxszal működik, de néha hasznos lehet egy Windowson futó SSH szerver is.

Cygwin telepítése

A Cygwin egy olyan Windowsos program, ami egy kis linuxot varázsol a gépünkre alapértelmezetten, de felülbírálhatóan a rendszer gyökérkönyvtárába egy cygwin mappába. Létezik ugyan egy freeSSHd nevű program is, amivel csak SSH szervert kaphatunk, de már nagyon régen nem fejlesztik. És bár előnye, hogy van grafikus admin felülete, kevesebbet tud, mint a cygwin. így a Cygwin-t javaslom és ezt is fogom bemutatni.

Akit a freeSSHD mégis érdekel, Lexandro blogjában olvashat róla:
SSH szerver Windows alá

Van egy lista a Wikipedia-n az egyes SSH szerverekről, ha valakit érdekelnek a lehetőségek:
Comparison of SSH servers

Töltsük le a "setup.exe" fájlt a Cygwin weboldaláról: http://cygwin.com/install.html!

A telepítés egyszerű. A "setup.exe" -t elindítva először arra lesz kíváncsi, hogy a netről telepítsen vagy helyi könyvtárból. Vagy csak letöltse a cygwin-t. A legelső opció maradhat bejelölve, azaz netről telepítünk

Utána a célkönyvtárat kérdezi és hogy kiknek telepítjük a programot. Csak saját felhasználónak, vagy mindenkinek. Utóbbi az alapértelmezett. Hagyhatjuk is.

Ezután az ideiglenes könyvtár helyét kérdezi, amibe letölti a csomagokat és onnan történik a telepítés. Ez megmarad a telepítés után is a későbbi módosításokhoz. De törölni is lehet.

Majd a kapcsolat típusát kérdezi. Ahol az alapértelmezett a "direct", azaz közvetlen internet kapcsolat. Ezt is hagyhatjuk.

Majd egy szervercímet kér, ahonnan a program komponenseit letölti. Én az "ftp.fsn.hu" -t választottam. De bármelyik másikat is lehetne.

Következő lépésben kiválaszthatjuk a telepítendő csomagokat. Fa struktúrában lehet böngészni kategóriák szerint, de a "View" gombra kattintva lehet nézetet váltani. Akár azt is megnézhetjük, hogy alapértelmezetten milyen csomagok kerülnének fel (pending).

Az "openssh" csomagra lesz szükség. A keresőbe beírva a kifejezést szűrhető a lista. De a "Net" kategóriában van. A "skip" szövegre kattintva a "kihagyás" státuszt telepítendőre lehet állítani.

Mivel az alapértelmezetten telepített "vi" szerkesztőt én nem szeretem, kiválasztottam még az "mc" és a "nano" csomagokat az "Editor" kategóriából.

Végül még jelzi, hogy vannak függőségei a telepítendő csomagoknak, amiket el kell fogadnunk. Ezután elkezdődik a telepítés, aminek a végén előfordulhat, hogy megjelenik egy hibaüzenet, aminek részleteit a telepítési könyvtáron belüli var/log/setup.log.full fájlban megnézhetjük. De ettől még a telepítés sikeres lehet.

Választás szerint kikerülhetett a Cygwin terminál ikonja az asztalra és/vagy a start menübe. A terminált elindítva a linuxban megszokott parancsokat használhatjuk. Már ami telepítésre került. De az alapvető használathoz pont elég.

SSH szerver elindítása

Az SSH szerver elindításához adminisztrátori jog kell. A Cygwin ikonján jobb egérbombbal kattintsunk, majd "Run as Administrator", azaz "Futtatás rendszergazdaként" opcióval futtassuk a Cygwint!

Elő kell készíteni a szerver futtatását:

ssh-host-config

A telepítő eldöntendő kérdéseket tesz fel, felhasználót hoz létre és ahhoz jelszavat készít. Nézzük a kérdéseket:

*** Query: Should privilege separation be used? (yes/no) yes
*** Query: new local account 'sshd'? (yes/no) yes
*** Query: Do you want to install sshd as a service?
*** Query: (Say "no" if it is already installed as a service) (yes/no) yes
*** Query: Enter the value of CYGWIN for the daemon: [] ntsec
*** Query: Do you want to use a different name? (yes/no) no
*** Query: Create new privileged user account 'cyg_server'? (yes/no) yes
*** Query: Please enter the password:
*** Query: Reenter:

A sorok végén látható az adandó válasz. "yes" vagy "no". Többnyire igennel válaszolunk. Egy helyen nemmel, amikor az SSH szerver felhasználónevének megváltoztatására kérdez. Az maradhat az alapértelmezett. A "CYGWIN for the daemon" kérdésnél beírjuk, hogy "ntsec". A végén pedig megadjuk a cyg_Server felhasználó jelszavát. A jelszó megerősítése után kódolatlanul kiírja a képernyőre a beírt jelszót. Így, ha lehet ne egy csapat leskelődővel a hátunk mögött írjuk be a legtitkosabb jelszónkat!

Már csak el kell indítani a szervert, ami a gép újraindításakor automatikusan elindulna magától. A következő parancsok bármelyikével indítható az SSH szerver:

net start sshd

vagy

cygrunsrv -S sshd

vagy

cygrunsrv --start sshd

Leállítása pedig:

net stop sshd

vagy

cygrunsrv -E sshd

vagy

cygrunsrv --stop sshd

Konfiguráció

A Cygwin terminálból nézve a "/" a cygwin telepítési könyvtárra fog mutatni. Azon belül épül fel a kis linux. A valós Windowsos meghajtókat a "/cygdrive/BETUJEL" módon lehet elérni. Ez a javasolt, de a hagyományos Windowsos módszer is működik.

A konfiguráció megegyezik a Debian linuxnál leírtakkal. Annyi különbséggel, hogy a konfigurációs fájl az "/etc/sshd_config" útvonalon van. A szerver indítása után már beléphetünk akár a virtuális gépből is a gazda Windows gépre. Viszont az IP címet kell a hoszt helyére írni. Célszerű helyi hálózati IP címet használni, mivel az nagyobb valószínűséggel lesz állandó.

Ugyanúgy lehet SSH kulcspárokat generálni és telepíteni a Windowson futó SSH szerverre is.

Mivel a valós gépet már IP alapján távolról mások is elérhetnék, ha nem blokkolja tűzfal a választott portot, javasolt a 22-estől eltérő portot választani. Például 2246. Ha cél a távolról bejelentkezés, akkor a Windows tűzfalon is engedélyezni kell a portot.

SSH kliens Windows 7-ben

Az SSH kliens telepítése megtörtént az "openssh" csomag telepítésével. A konfiguráció megegyezik a Debian linuxnál leírtakkal, de a globális konfigurációs fájl az "/etc/ssh_config".

Gyakorlatilag az ssh kulcsok generálása és másolása is megegyezik a linuxos megoldással. Ugyanakkor létezik egy "ssh-user-config" program is, amit futtatva szintén kérdésekre válaszolva generálhatjuk a különböző típusú kulcsokat többek között.

Kliensként még használható a PuTTY program is. SSH kulcsokat pedig a PuTTYGen -nel lehet generálni. A PuTTY egy kicsi, de igen hasznos program, ha az ember nem akar egy cygwin-t telepíteni. Tulajdonképpen a PuTTY programot nem is kell telepíteni. Különböző verziói különböző funkciókra valók.

Említettem már a WinSCP-t is, amivel egy kétpaneles fájlkezelőt kapunk. Támogatja az SCP és SFTP protokollokat is. Bármelyikkel kapcsolódhatunk a szerverre. Akár kulcsfájlt is meg lehet adni. Ennél sokkal többet tud, de az most nem fér bele már ebbe a fejezetbe.

Összefoglalás

Ezzel a fejezettel tehát bemutattam, hogyan lehet alapszinten használni az SSH-t Windowson és Debian linuxon is. A virtuális gépen ezzel a munka könnyebbé válik, mert legalább a webes tartalmakat kezelhetjük a "web" felhasználóval.

A root felhasználónak most nincsen jelszava, ezért nem lehet vele belépni SSH-n, így WinSCP-n sem. Jelszót viszont a web felhasználón keresztül root jogot szerezve a "passwd" parancsot futtatva beállíthatunk. Akkor már a szerverkonfigurációt is végezhetjük grafikus felületen.

Említettem a PuTTY SSH klienst is, de a Cygwin terminálon keresztül linux módszerrel dolgozhatunk SSH-val is. Ráadásul a Cygwin sokkal többet tud, hiszen linuxos csomagokat telepíthetünk hozzá, amivel platformfüggetlenebb fejlesztői környezetet alakíthatunk ki.

Az SSH az első lépés, de nem az egyetlen a távoli munka segítésére. A többiről a későbbiekben lesz szó.

Bár az SSH kulcs felmásolásával történt minimális változás a virtuális gépen, ezért nem érdemes külön exportálni. Az exportált gép hordozásával pedig az új gazda gépen úgyis újra kellene másolni az új kulcsot. Így ezzel a fejezet véget is ér.

Jó munkát!

Források

Egyéb ajánlott linkek

Kategóriák: 
Megosztás/Mentés