Tartalomjegyzék

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.

Navigáció

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, minden 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.