Tartalomjegyzék
- Mi is az az SFTP?
- Csatlakozás SFTP-vel
- Súgó parancs
- Navigáció
- Fájlátvitel
- Helyi fájlok átvitele távoli rendszerbe
- Egyszerű fájlműveletek
- Összegzés
Mi is az az SFTP?
Az FTP (File Transfer Protocol), vagy más néven Fájlátviteli protokoll egy népszerű módszer két távoli rendszer közötti fájlátvitelhez.
Az SFTP (SSH File Transfer Protocol vagy Secure File Transfer Protocol), vagy más néven Biztonságos fájlátviteli protokoll egy különálló protokoll SSH-val, ami hasonlóan működik, de biztonságos kapcsolaton keresztül. Előnye, hogy képes megnövelni a biztonságot és bejárni a fájlrendszert mind a helyi, mind a távoli rendszerben.
Az SFTP majdnem minden esetben jobban kedvelt az FTP-nél, mert biztonságosabb, ráadásul SSH kapcsolattal képes más felhasználó kapcsolatán keresztül belépni. Az FTP egy olyan nem biztonságos protokoll, amelyet csak meghatározott esetekben használunk, vagy akkor, hogyha teljesen biztosak vagyunk benne, hogy megbízunk az adott hálózatban. Habár az SFTP nagyon sok grafikus eszközbe be van integrálva, ez a leírás bemutatja, hogy hogyan is használhatjuk az interaktív parancssoros kezelőfelületét.
Csatlakozás SFTP-vel
Alapértelmezettként az SFTP SSH protokollt használ a biztonságos kapcsolat felállításához és hitelesítéséhez. Emiatt ugyanazok a módszerek érhetőek el ebben az esetben is, mint az SSH-nál. Habár a jelszavak létrehozása mindenki számára igen egyszerű, ajánlatos SSH kulcsokat létrehozni, és a nyilvános kulcsot elhelyezni egy olyan rendszerben, amelyet el akarunk érni. Ez sokkal biztonságosabb és hosszútávon időt is spórolhatunk vele.
Amennyiben még nem állított fel SSH kulcsokat, úgy azt az ebben a cikkben leírtak segítségével megteheti.
Ha rá tudunk csatlakozni a gépre SSH használatával, akkor végrehajtottunk minden szükséges lépést ahhoz, hogy fájljainkat az SFTP-t használva kezelhessük. Teszteljük az SSH hozzáférést a következő paranccsal:
ssh username@remote_hostname_or_IP
Ha ez működik, lépjünk ki:
exit
Létrehozhatjuk az SSH kapcsolatot, majd megnyithatunk egy SFTP munkamenetet az SSH kapcsolat használatával, ha beírjuk a következő parancsot:
sftp username@remote_hostname_or_IP
Ezzel rá fogunk csatlakozni a távoli rendszerre, és a mi parancsjelünk az SFTP parancsjelre fog cserélődni.
Súgó parancs
A leghasznosabb parancs, amit először megtanulunk, az a súgó parancs. Ezzel elérhetjük SFTP súgó összegzését. Az előhívása rendkívül egyszerű, csak be kell írnunk a kettő közül valamelyiket:
help
?
Ez ki fogja listázni az elérhető parancsokat:
Available commands: bye Quit sftp cd path Change remote directory to 'path' chgrp grp path Change group of file 'path' to 'grp' chmod mode path Change permissions of file 'path' to 'mode' chown own path Change owner of file 'path' to 'own' df [-hi] [path] Display statistics for current directory or filesystem containing 'path' exit Quit sftp get [-Ppr] remote [local] Download file help Display this help text lcd path Change local directory to 'path'
A következő alpontokban ezeket fogjuk bővebben is megismerni.
Létezik néhány parancs, amely segítségével navigálhatunk a távoli rendszer fájlhierarchiájában. Ezek hasonlóan működnek, mint parancsvezérlő társai.
Először is bizonyosodjunk meg róla, hogy a távoli rendszernek melyik könyvtárában tartózkodunk épp. Pontosan úgy, mint egy parancsvezérlő munkafolyamat esetében, beírhatjuk a következő parancsot, így megkapjuk a jelenlegi könyvtárat:
pwd Remote working directory: /home/demouser
Egy másik ismerős paranccsal meg is nézhetjük a távoli rendszer jelenlegi könyvtárában található fájlokat:
ls Summary.txt info.html temp.txt testDirectory
Jegyezzük meg, hogy a parancsok az SFTP kezelőfelületén nem a megszokott parancsvezérlő parancsok, és nem olyan sok jellemzővel rendelkeznek, de használnak több fontosabb jelzőt:
ls -la drwxr-xr-x 5 demouser demouser 4096 Aug 13 15:11 . drwxr-xr-x 3 root root 4096 Aug 13 15:02 .. -rw------- 1 demouser demouser 5 Aug 13 15:04 .bash_history -rw-r--r-- 1 demouser demouser 220 Aug 13 15:02 .bash_logout -rw-r--r-- 1 demouser demouser 3486 Aug 13 15:02 .bashrc drwx------ 2 demouser demouser 4096 Aug 13 15:04 .cache -rw-r--r-- 1 demouser demouser 675 Aug 13 15:02 .profile . . .
Ahhoz, hogy eljussunk egy másik könyvtárba, írjuk be a következő parancsot:
cd testDirectory
Így már bejárhatjuk a távoli fájlrendszert, de mi történik akkor, hogyha szükségünk van hozzáférésre a helyi fájlrendszerben? A parancsokat átirányíthatjuk a helyi fájlrendszerbe, ha egy “l” (local=helyi) betűt elé teszünk.
Az eddig említett parancsok közül mindnek van helyi megfelelője.
lpwd Local working directory: /Users/demouser
Megnézhetjük a helyi gép jelenlegi könyvtárában elhelyezett tartalmakat is:
lls Desktop local.txt test.html Documents analysis.rtf zebra.html
A helyi rendszeren belül másik könyvtárba is átmehetünk:
lcd Desktop
Fájlátvitel
A távoli és helyi fájlrendszerekben való navigáció igen haszontalan, ha nem tudunk fájlokat küldeni a kettő között.
Távoli fájlok átvitele helyi rendszerre
Ha fájlokat szeretnénk letölteni egy távoli hosztról, azt a következő paranccsal tudjuk megtenni:
get remoteFile Fetching /home/demouser/remoteFile to remoteFile /home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01
Ahogy láthatjuk, a get parancs alapértelmezettként a fájl nevével készít egy fájlt a helyi fájlrendszerben. A távoli fájlt átmásolhatjuk egy másik helyre is, ha azt a parancs mögé írjuk:
get remoteFile localFile
A get parancs is option flageket használ. Például átmásolhatunk egy könyvtárat és annak teljes tartalmát azzal, hogy meghatározzuk a visszatekintő opciót:
get -r someDirectory
Megmondhatjuk az SFTP-nek, hogy tartsa meg a megfelelő engedélyeket és hozzáférési időt a P vagy -p jelzővel:
get -Pr someDirectory
Helyi fájlok átvitele távoli rendszerbe
A fájlok távoli rendszerbe való átvitele nagyon egyszerű, csupán a put parancsot kell alkalmaznunk:
put localFile Uploading localFile to /home/demouser/localFile localFile 100% 7607 7.4KB/s 00:00
Ugyanaz a helyzet a get paranccsal is, egy teljes helyi könyvtár másolásához a következőt írjuk be:
put -r localDirectory
Egy ismerős eszköz, ami hasznos lehet fájlok le- és feltöltéséhez, az a df parancs. Hasonlóan működik, mint a parancssor. Ennek a használatával megnézhetjük, hogy van-e elegendő tárhelyünk az átvitel létrejöttéhez:
df -h Size Used Avail (root) %Capacity 19.9GB 1016MB 17.9GB 18.9GB 4%
Fontos megjegyezni, hogy nincs helyi változata ennek a parancsnak, de ezt könnyen megoldhatjuk a ! paranccsal:
A ! parancs a helyi parancsvezérlőbe irányít minket, ahol bármilyen elérhető parancsot futtathatunk a helyi rendszeren. Leellenőrizhetjük a rendelkezésre álló helyet a következő paranccsal:
! df -h Filesystem Size Used Avail Capacity Mounted on /dev/disk0s2 595Gi 52Gi 544Gi 9% / devfs 181Ki 181Ki 0Bi 100% /dev map -hosts 0Bi 0Bi 0Bi 100% /net map auto_home 0Bi 0Bi 0Bi 100% /home
Bármelyik helyi parancs működni fog.
Ahhoz, hogy visszatérhessünk az SFTP munkafolyamathoz, gépeljük be a következőt:
exit
Ekkor visszatérünk az SFTP parancsjelhez.
Egyszerű fájlműveletek
Az SFTP lehetővé tesz egy alapszintű fájlkarbantartást, ami hasznos, ha fájlhierarchiákkal dolgozunk. Például, megváltoztathatjuk egy adott fájl tulajdonosát egy távoli rendszerben a lenti paranccsal:
chown userID file
Vegyük észre, hogy a chmod parancstól eltérően az SFTP parancs nem fogad el felhasználónevet, hanem UIDket (Unique Identifier= felhasználó azonosító) használ. Sajnos nincs egyszerű módszer arra, hogy megtudjuk a megfelelő UID-t az SFTP felületéről. Ezt úgy oldhatjuk meg egy közbeiktatott lépéssel, hogy a következő parancsot gépeljük be:
get /etc/passwd !less passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh . . .
Figyeljük meg, hogy maga a ! parancs használata helyett előtagként használtuk a helyi parancsvezérlő parancshoz. Ez működik bármely helyi gépen elérhető parancs esetében és korábban használhattuk volna a df parancsnál is. Az UID a fájl harmadik oszlopában lesz, kettőspontokkal körülhatárolva.
Ehhez hasonlóan megváltoztathatjuk a fájl csoporttulajdonosát:
chgrp groupID file
Nem egyszerű listát lekérni a távoli rendszer csoportjairól. A következő paranccsal azonban megtehetjük:
get /etc/group !less group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7: . . .
A harmadik oszlop tartalmazza az első oszlopban található csoporthoz tartozó azonosítót. Ez az amit mi keresünk. Szerencsére a chmod parancs működik távoli rendszereken is:
chmod 777 publicFile Changing mode on /home/demouser/publicFile
Helyi fájlok engedélyeinek módosításához nincs parancs, de beállíthatunk egy helyi umask-ot, aminek segítségével bármelyik általunk a helyi rendszerre másolt fájl rendelkezni fog a megfelelő engedélyekkel.
Ezt egy lumask paranccsal tehetjük meg:
lumask 022 Local umask: 022
Így minden általános letöltött fájl (amennyiben a -p jelzőt nem használjuk) rendelkezni fog a 644-es engedéllyel.
Az SFTP segítségével létrehozhatunk könyvtárakat helyi és távoli rendszereken is az lmkdir és mkdir parancsokkal.
A fájlparancsok további része a távoli fájlrendszert érinti:
ln rm rmdir
Ezek a parancsok lemásolják a parancsvezérlő viselkedését. Ha ezeket a lépéseket a helyi rendszeren kell elérnünk, ne felejtsük el, hogy a parancsvezérlőbe a ! parancs juttat el minket. Ezen felül egy egyszerű parancsot is végrehajthatunk a helyi rendszeren, úgy hogy a parancs elé illesztjük be a ! -t:
!chmod 644 somefile
Amikor befejeztük az SFTP munkafolyamatot, akkor az exit vagy bye paranccsal vethetünk véget a kapcsolatnak:
Bye
Összegzés
Habár az SFTP egy egyszerű eszköz, nagyon hasznos szerverek adminisztrálásához és a köztük való fájlátvitelhez.
Ha FTP-t vagy SCP-t használunk fájlok átviteléhez, akkor az SFTP egy jó módja annak, hogy megerősítsük mindkét módszert. Habár nem megfelelő minden szituációban, egy rugalmas eszköz, amely nem árt, ha megtalálható repertoárunkban.