
De scp commando maakt het kopiëren van bestanden tussen Linux-computers gemakkelijk en veilig. Het maakt gebruik van SSH-beveiliging, maar het beste van alles is dat het eenvoudig is. Als je kunt gebruiken cpje kunt gebruiken scp.
Het Secure Copy Protocol en scp
Laten we een paar termen definiëren: er is SCP en er is scp. De hoofdletter SCP staat voor het Secure Copy Protocol. de kleine letter scp staat voor veilig cp. Met andere woorden, SCP is een protocol en scp is een programma.
scp is ontworpen als een veilige manier om bestanden te kopiëren tussen externe Linux-computers. Het gebruikt SSH om beveiligde verbindingen tot stand te brengen. SSH, of beveiligde shell, is een cryptografisch netwerkprotocol dat vaak wordt gebruikt om toegang te krijgen tot en in te loggen op Linux-computers op afstand. Op Linux-distributies wordt SSH-functionaliteit geleverd door OpenSSH.
SCP is wat lang in de tand, en er zijn zorgen geuit over het gebruik ervan in de huidige tijd. Sinds OpenSSH versie 8.8 wordt SCP als verouderd beschouwd. moderne implementaties van scp standaard het Secure File Transfer Protocol gebruiken. SSH wordt nog steeds gebruikt voor de beveiligde verbinding, maar de bestandsoverdrachten worden afgehandeld door SFTP. Dit is allemaal onzichtbaar en gebeurt op magische wijze onder de motorkap, en de scp syntaxis is hetzelfde gebleven.
De rsync programma heeft de voorkeur boven scp maar u kunt een computer tegenkomen die geen rsync geïnstalleerd, en waarvoor u geen root-rechten hebt, wat betekent dat u het niet kunt installeren. Voor het kopiëren van bestanden van computer naar computer op een autonoom netwerk, scp zit helemaal goed. Voor scp om te werken, moet u SSH hebben draaien op alle computers waar u van en naar kopieert.
Om te zien welke versie van OpenSSH op uw computer is geïnstalleerd, typt u:
ssh -V

Een enkel bestand kopiëren
Zoals de standaard cp opdracht, scp kopieert bestanden van de bron locatie naar de doelwit plaats. Om een bestand naar een externe computer te kopiëren, moet u het IP-adres of de netwerknaam van de externe computer weten. U moet ook de inloggegevens hebben voor een gebruikersaccount met schrijfrechten voor de locatie waarnaar u het bestand verzendt.
Om een bestand met de naam “sample.txt” naar een computer met de naam “fedora-34” op het lokale netwerk te sturen, is de syntaxis:
scp ./sample.txt dave@fedora-34.local:/home/dave/Downloads/

De opdracht is opgebouwd uit:
- scp: Het scp-commando
- ./voorbeeld.txt: Het bestand dat we gaan verzenden. Dit staat in de huidige directory.
- dave@: Het gebruikersaccount op de externe computer waarnaar we het bestand gaan verzenden.
- fedora-34.local: De netwerknaam van de externe computer.
- :/home/dave/Downloads/: de locatie waarnaar het bestand moet worden gekopieerd op de externe computer. Let op de dubbele punt “:” die de computernaam en het pad scheidt.
U wordt gevraagd om het wachtwoord voor het account op de externe computer in te voeren en vervolgens wordt het bestand gekopieerd.
Als u wilt dat het bestand een andere naam heeft op de externe computer, kunt u een bestandsnaam toevoegen aan het doelpad. Gebruik deze syntaxis om hetzelfde bestand te kopiëren en het “anders-bestand.txt” te noemen:
scp ./sample.txt dave@fedora-34.local:/home/dave/Downloads/different-file.txt

De scp commando zal stilletjes bestaande bestanden overschrijven, dus wees voorzichtig bij het kopiëren van bestanden. Als er al een bestand op de doelcomputer bestaat met dezelfde naam als het bestand dat u kopieert, wordt het overschreven en verloren.
Als de doelcomputer niet de standaard SSH-poort van 22 gebruikt, kunt u de -P (poortnummer) om het juiste poortnummer op te geven.
Een enkel bestand ophalen
Een bestand kopiëren: van een externe server, plaatst u eenvoudig de externe server als de bron en plaatst u het lokale pad waar u het bestand wilt kopiëren als het doel. We gaan een bestand met de naam “development-plan.md” kopiëren van de externe computer naar de huidige map op de lokale computer.
scp dave@fedora-34.local:/home/dave/Downloads/development-plan.md .

Als u een bestandsnaam toevoegt aan het lokale pad, wordt het bestand gekopieerd en krijgt het die naam.
scp dave@fedora-34.local:/home/dave/Downloads/development-plan.md ./dp-1.md

Het bestand wordt gekopieerd maar hernoemd naar de door ons opgegeven bestandsnaam.
ls -hl *.md

Meerdere bestanden kopiëren
Het kopiëren van meerdere bestanden in beide richtingen is eenvoudig. U kunt zoveel bronbestanden weergeven als u wilt. Hier kopiëren we twee markdown-bestanden en een CSV-bestand.
scp ./dp-1.md ./dp-2.md ./dp-3.csv dave@fedora-34.local:/home/dave/Downloads/

De drie bestanden worden gekopieerd naar de externe computer. U kunt ook jokertekens gebruiken. Dit commando doet precies hetzelfde als het laatste commando.
scp ./dp. dave@fedora-34.local:/home/dave/Downloads/

Recursief kopiëren van mappen
De -r (recursieve) optie laat je hele mappenbomen kopiëren met een enkele opdracht. We hebben twee bestanden in een map met de naam “data” geplaatst en een map met de naam “CSV” in de map “data” gemaakt. We hebben een CSV-bestand in de map “data/CSV” geplaatst.
Met deze opdracht worden de bestanden gekopieerd en wordt de directorystructuur op de externe computer opnieuw gemaakt.
scp -r ./data dave@fedora-34.local:/home/dave/Downloads/

Bestanden kopiëren tussen externe servers
Je kunt zelfs instrueren scp om bestanden van de ene externe server naar de andere te kopiëren. De syntaxis is vrij eenvoudig. U geeft de accountnaam en het netwerkadres van de bronserver op en de accountnaam en het netwerkadres van de doelserver. De bestanden worden gekopieerd van de bronserver en gekopieerd naar de locatie op de doelserver.
Hoewel de syntaxis eenvoudig is, is er wat meer aandacht nodig om ervoor te zorgen dat al het andere op zijn plaats is. Het is duidelijk dat de locatie waarnaar u de bestanden op de externe server probeert te kopiëren, toegankelijk moet zijn voor het gebruikersaccount dat u op de opdrachtregel opgeeft. En dat gebruikersaccount moet op die locatie schrijfrechten hebben.
Een subtielere voorwaarde is dat er SSH-toegang moet worden ingesteld tussen uw lokale computer en de broncomputer, en ook tussen de bron- en doelservers. Zorg ervoor dat u SSH kunt gebruiken om in te loggen op de doelserver van de bronserver. Als je dat niet kunt, scp kan geen verbinding maken.
Het instellen van SSH-sleutels zodat u geauthenticeerde maar wachtwoordloze toegang kunt gebruiken, heeft verreweg de voorkeur. Het gebruik van wachtwoorden wordt al snel een rommeltje en – omdat je voor elk gebruikersaccount om het wachtwoord wordt gevraagd – voorkomt het dat je het proces volledig kunt automatiseren met een script.
We stellen SSH-sleutels in voor de gebruikersaccounts die we op elke externe server gebruiken. Dit zorgde voor naadloze SSH-toegang tot de andere server voor die twee gebruikers. Dit stelt ons in staat om bestanden in beide richtingen over te dragen, met behulp van die twee gebruikersaccounts.
Om bestanden te kopiëren van het “davem” gebruikersaccount op een Manjaro computer naar het “dave” account op een Fedora computer, via een scp commando uitgegeven vanaf onze lokale Ubuntu-computer, de syntaxis is:
scp davem@manjaro20-0-1.local:/home/davem/man. dave@fedora-34.local:/home/dave/

We zijn stilletjes teruggekeerd naar de commandoregel. Er is geen indicatie dat er iets is gebeurd. Werkend vanuit het uitgangspunt dat geen nieuws goed nieuws is, scp rapporteert alleen over fouten voor dit kopiëren op afstand. Bij het controleren van de Fedora-computer kunnen we zien dat de bestanden van de Manjaro-computer zijn gekopieerd en ontvangen.

Standaard worden de bestanden rechtstreeks van de broncomputer naar de doelcomputer gekopieerd. U kunt dit overschrijven met behulp van de -3 (drieweg) optie.
Met deze optie worden de bestanden via uw lokale computer van het doel naar de bron overgebracht. Om dat te laten gebeuren, moet er naadloze SSH-toegang zijn van uw lokale computer naar de doelcomputer.
scp -3 davem@manjaro20-0-1.local:/home/davem/man. dave@fedora-34.local:/home/dave/

Er is nog steeds geen indicatie dat er iets is gebeurd, zelfs niet wanneer de bestanden via uw lokale computer worden gekanaliseerd. Het bewijs van de pudding is natuurlijk om de doelcomputer te controleren.
Andere opties
De -p (bestandskenmerken behouden) behouden de oorspronkelijke bestandsaanmaak, -eigendom en -toegangsvlaggen op de overgedragen bestanden. Ze hebben dezelfde metadata als de originele bestanden op de broncomputer.
Als je foutmeldingen ziet, probeer dan de opdracht te herhalen en gebruik de -v (uitgebreide) vlag om gedetailleerde informatie over de overdrachtspoging te zien. Je zou in staat moeten zijn om het punt van falen in de uitvoer te herkennen.
De -C (comprimeren) optie comprimeert de bestanden terwijl ze worden gekopieerd en decomprimeert ze wanneer ze worden ontvangen. Dit is iets dat teruggaat tot het tijdperk van trage modemcommunicatie tussen computers. Door de omvang van de lading te verkleinen, kunnen de transmissietijden worden verkort.
Tegenwoordig duurt het comprimeren en decomprimeren van de bestanden waarschijnlijk langer dan het verschil tussen de gecomprimeerde en ongecomprimeerde verzendingen. Maar omdat scp wordt het best gebruikt om bestanden tussen computers op hetzelfde LAN te kopiëren, de overdrachtssnelheid zou niet zo’n probleem moeten zijn.