Hoe SFTP te Gebruiken om Bestanden Veilig Over te Dragen met een Externe Server

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:

  1. ssh sammy@your_server_ip_or_remote_hostname

Als dat werkt, typ dan om terug te gaan:

  1. exit

Nu kunnen we een SFTP-sessie opzetten door het volgende commando uit te voeren:

  1. sftp sammy@your_server_ip_or_remote_hostname

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:

  1. sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname

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:

  1. help

of

  1. ?

Dit zal een lijst van de beschikbare opdrachten weergeven:

Output
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' . . .

We zullen enkele van de commando’s verkennen die je ziet in de volgende secties.

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:

  1. pwd
Output
Remote working directory: /home/demouser

We kunnen de inhoud van de huidige map van het externe systeem bekijken met een ander bekend commando:

  1. ls
Output
Summary.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:

  1. ls -la
Output
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 . . .

Om naar een andere map te gaan, kunnen we dit commando gebruiken:

  1. cd testDirectory

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:

  1. lpwd
Output
Local working directory: /Users/demouser

We kunnen de inhoud van de huidige map op de lokale machine weergeven:

  1. lls
Output
Desktop local.txt test.html Documents analysis.rtf zebra.html

We kunnen ook de map wijzigen waarmee we op het lokale systeem willen werken:

  1. lcd Desktop

Bestanden overzetten met SFTP

Als we bestanden van onze externe host willen downloaden, kunnen we dat doen met het get commando:

  1. get remoteFile
Output
Fetching /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:

  1. get remoteFile localFile

Het get commando accepteert ook enkele optievlaggen. Bijvoorbeeld, we kunnen een map en al zijn inhoud kopiëren door de recursieve optie te specificeren:

  1. get -r someDirectory

We kunnen SFTP vertellen om de juiste machtigingen en toegangstijden te behouden door de -P of -p vlag te gebruiken:

  1. get -Pr someDirectory

Bestanden overzetten naar het externe systeem

Het overzetten van bestanden naar het externe systeem werkt op dezelfde manier, maar met een put commando:

  1. put localFile
Output
Uploading 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:

  1. put -r localDirectory

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:

  1. df -h
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:

  1. !

en vervolgens

  1. df -h
Output
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

Elke andere lokale opdracht zal zoals verwacht werken. Om terug te keren naar uw SFTP-sessie, typt u:

  1. exit

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:

  1. chown userID file

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:

  1. get /etc/passwd
  2. !less passwd
Output
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 . . .

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:

  1. chgrp groupID file

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:

  1. get /etc/group
  2. !less group
Output
root: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:

  1. chmod 777 publicFile
Output
Changing 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:

  1. lumask 022
Output
Local 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:

  1. ln
  2. rm
  3. rmdir

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:

  1. !

Of voer een enkele opdracht uit op het lokale systeem door de opdracht vooraf te laten gaan door ! zoals:

  1. !chmod 644 somefile

Wanneer u klaar bent met uw SFTP-sessie, gebruikt u exit of bye om de verbinding te sluiten.

  1. bye

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.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server