Introductie
FTP, het File Transfer Protocol, was een populair, ongecodeerd methode om bestanden over te brengen tussen twee externe systemen. Vanaf 2022 is het door de meeste moderne software verouderd verklaard vanwege een gebrek aan beveiliging, en kan het voornamelijk alleen nog worden gebruikt in legacy-toepassingen.
SFTP, wat staat voor Secure File Transfer Protocol, is een apart protocol dat is ingebouwd in SSH en FTP-commando’s kan implementeren via een beveiligde verbinding. Meestal kan het dienen als een directe vervanging in alle contexten waar nog steeds een FTP-server nodig is.
In bijna alle gevallen heeft SFTP de voorkeur boven FTP vanwege de onderliggende beveiligingsfuncties en het vermogen om mee te liften op een SSH-verbinding. FTP is een onveilig protocol dat alleen moet worden gebruikt in beperkte gevallen of op netwerken die u vertrouwt.
Hoewel SFTP is geïntegreerd in veel grafische tools, zal deze handleiding demonstreren hoe het te gebruiken via de interactieve opdrachtregelinterface.
Hoe te verbinden met SFTP
Standaard gebruikt SFTP het SSH-protocol om te authenticeren en een veilige verbinding tot stand te brengen. Hierdoor zijn dezelfde authenticatiemethoden beschikbaar als in SSH.
Hoewel je standaard kunt authenticeren met wachtwoorden, raden we aan om SSH-sleutels te maken en je openbare sleutel over te dragen naar elk systeem waartoe je toegang nodig hebt. Dit is veel veiliger en kan je op de lange termijn tijd besparen.
Zie deze handleiding om SSH-sleutels in te stellen om toegang te krijgen tot je server als je dat nog niet hebt gedaan.
Als je verbinding kunt maken met de machine via SSH, dan heb je alle noodzakelijke vereisten voltooid om SFTP te gebruiken om bestanden te beheren. Test SSH-toegang met het volgende commando:
Als dat werkt, typ dan om terug te gaan:
Nu kunnen we een SFTP-sessie opzetten door het volgende commando uit te voeren:
Je zult verbinding maken met het externe systeem en je prompt zal veranderen naar een SFTP-prompt.
Als je werkt met een aangepoorte SSH-poort (niet de standaardpoort 22), dan kun je een SFTP-sessie openen als volgt:
Dit zal je verbinden met het externe systeem via de opgegeven poort.
Hulp krijgen in SFTP
De meest bruikbare opdracht om als eerste te leren is het help-commando. Hiermee krijg je toegang tot een samenvatting van de andere SFTP-opdrachten. Je kunt het oproepen door een van deze in te typen in de prompt:
of
Dit zal een lijst van de beschikbare opdrachten weergeven:
OutputAvailable 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'
. . .
We zullen enkele van de commando’s verkennen die je ziet in de volgende secties.
Navigeren met SFTP
We kunnen door de bestandshiërarchie van het externe systeem navigeren met behulp van een aantal commando’s die vergelijkbaar werken met hun shell-tegenhangers.
Latem we ons eerst oriënteren door te achterhalen in welke map we momenteel op het externe systeem zijn. Net zoals in een typische shell-sessie, kunnen we het volgende typen om de huidige map te krijgen:
OutputRemote working directory: /home/demouser
We kunnen de inhoud van de huidige map van het externe systeem bekijken met een ander bekend commando:
OutputSummary.txt info.html temp.txt testDirectory
Merk op dat de commando’s die beschikbaar zijn binnen de SFTP-interface geen 1:1-overeenkomst zijn met typische shell-syntax en niet zo uitgebreid zijn. Ze implementeren echter wel enkele van de belangrijkere optionele vlaggen, zoals het toevoegen van -la
aan ls
om meer bestandsmetadata en -machtigingen te bekijken:
Outputdrwxr-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
. . .
Om naar een andere map te gaan, kunnen we dit commando gebruiken:
We kunnen nu door het externe bestandssysteem navigeren, maar wat als we toegang nodig hebben tot ons lokale bestandssysteem? We kunnen commando’s naar het lokale bestandssysteem sturen door ze vooraf te laten gaan door een l
voor lokaal.
Alle tot nu toe besproken commando’s hebben lokale equivalenten. We kunnen de lokale werkmap afdrukken:
OutputLocal working directory: /Users/demouser
We kunnen de inhoud van de huidige map op de lokale machine weergeven:
OutputDesktop local.txt test.html
Documents analysis.rtf zebra.html
We kunnen ook de map wijzigen waarmee we op het lokale systeem willen werken:
Bestanden overzetten met SFTP
Als we bestanden van onze externe host willen downloaden, kunnen we dat doen met het get
commando:
OutputFetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01
Zoals je kunt zien, downloadt het get
commando standaard een extern bestand naar een bestand met dezelfde naam op het lokale bestandssysteem.
We kunnen het externe bestand kopiëren naar een andere naam door de naam daarna te specificeren:
Het get
commando accepteert ook enkele optievlaggen. Bijvoorbeeld, we kunnen een map en al zijn inhoud kopiëren door de recursieve optie te specificeren:
We kunnen SFTP vertellen om de juiste machtigingen en toegangstijden te behouden door de -P
of -p
vlag te gebruiken:
Bestanden overzetten naar het externe systeem
Het overzetten van bestanden naar het externe systeem werkt op dezelfde manier, maar met een put
commando:
OutputUploading localFile to /home/demouser/localFile
localFile 100% 7607 7.4KB/s 00:00
Dezelfde vlaggen die werken met get
zijn van toepassing op put
. Dus om een hele lokale map te kopiëren, kun je put -r
uitvoeren:
Een bekend hulpmiddel dat handig is bij het downloaden en uploaden van bestanden, is het df
-commando, dat vergelijkbaar werkt met de opdrachtregelversie. Hiermee kunt u controleren of u voldoende ruimte heeft om de transfers uit te voeren waarin u geïnteresseerd bent:
Output Size Used Avail (root) %Capacity
19.9GB 1016MB 17.9GB 18.9GB 4%
Houd er rekening mee dat er geen lokale variant van deze opdracht is, maar we kunnen dat omzeilen door het !
-commando uit te voeren.
Het !
-commando brengt ons naar een lokale shell, waar we elke opdracht kunnen uitvoeren die beschikbaar is op ons lokale systeem. We kunnen het schijfgebruik controleren door het volgende in te typen:
en vervolgens
OutputFilesystem 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
Elke andere lokale opdracht zal zoals verwacht werken. Om terug te keren naar uw SFTP-sessie, typt u:
U zou nu het SFTP-prompt terug moeten zien.
Eenvoudige bestandsmanipulaties met SFTP
SFTP stelt u in staat om enkele soorten bestandsysteemonderhoud uit te voeren. Zo kunt u bijvoorbeeld de eigenaar van een bestand op het externe systeem wijzigen met:
Merk op hoe, in tegenstelling tot het systeem chmod
-commando, het SFTP-commando geen gebruikersnamen accepteert, maar in plaats daarvan UID’s gebruikt. Helaas is er geen ingebouwde manier om de juiste UID te kennen vanuit de SFTP-interface.
Als tijdelijke oplossing kunt u lezen uit het /etc/passwd
-bestand, dat gebruikersnamen koppelt aan UID’s in de meeste Linux-omgevingen:
Outputroot: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
. . .
Let op hoe in plaats van het geven van het !
commando op zichzelf, we het als een voorvoegsel hebben gebruikt voor een lokaal shell-commando. Dit werkt om elk commando uit te voeren dat beschikbaar is op onze lokale machine en had eerder gebruikt kunnen worden met het lokale df
commando.
De UID zal in de derde kolom van het bestand staan, zoals aangegeven door dubbele punt karakters.
Vergelijkbaar kunnen we de groepseigenaar van een bestand wijzigen met:
Opnieuw is er geen ingebouwde manier om een lijst te krijgen van de groepen van het externe systeem. We kunnen eromheen werken met het volgende commando:
Outputroot:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .
De derde kolom bevat het ID van de groep die is gekoppeld aan de naam in de eerste kolom. Dit is waar we naar op zoek zijn.
Het chmod
SFTP-commando werkt normaal op het externe bestandssysteem:
OutputChanging mode on /home/demouser/publicFile
Er is geen equivalent commando voor het manipuleren van lokale bestandsmachtigingen, maar u kunt de lokale umask instellen, zodat alle bestanden die naar het lokale systeem worden gekopieerd, overeenkomstige machtigingen hebben.
Dat kan worden gedaan met het lumask
commando:
OutputLocal umask: 022
Nu hebben alle reguliere bestanden die worden gedownload (zolang de -p
vlag niet wordt gebruikt) 644-machtigingen.
SFTP staat ook toe dat u mappen maakt op zowel lokale als externe systemen met respectievelijk lmkdir
en mkdir
.
De rest van de bestandscommando’s zijn alleen gericht op het externe bestandssysteem:
Deze commando’s repliceren het kerngedrag van hun shell-equivalenten. Als u deze acties op het lokale bestandssysteem moet uitvoeren, onthoud dan dat u een shell kunt openen door dit commando uit te geven:
Of voer een enkele opdracht uit op het lokale systeem door de opdracht vooraf te laten gaan door !
zoals:
Wanneer u klaar bent met uw SFTP-sessie, gebruikt u exit
of bye
om de verbinding te sluiten.
Conclusie
Hoewel de SFTP-syntax veel minder uitgebreid is dan moderne shell-tools, kan het handig zijn om compatibiliteit te bieden met de syntax van oude FTP of om de functionaliteit die beschikbaar is voor externe gebruikers van sommige omgevingen zorgvuldig te beperken.
Bijvoorbeeld, u kunt SFTP gebruiken om specifieke gebruikers in staat te stellen bestanden over te dragen zonder SSH-toegang. Voor meer informatie over dit proces, bekijk onze zelfstudie over Hoe SFTP inschakelen zonder shelltoegang.
Als u gewend bent om FTP of SCP te gebruiken om uw overdrachten uit te voeren, is SFTP een goede manier om de sterke punten van beide te benutten. Hoewel het niet geschikt is voor elke situatie, is het een flexibel hulpmiddel om in uw repertoire te hebben.