scp-commando: gebruik en opties, mappen kopiƫren en poort opgeven
scp is de kopieertool waarmee je bestanden uitwisselt met een server waarmee je via SSH verbinding maakt. Als je met het scp-commando een bestand verstuurt, zet je net als bij cp eerst de bron en daarna de bestemming. Toen we bestanden en mappen van een AlmaLinux 9-server naar een Debian 12-server verstuurden en weer ophaalden, verliep de overdracht via het SFTP-protocol en kwam een bestand van 20MB binnen 1 seconde aan.
Alle uitvoer hieronder is letterlijk het resultaat van scp uit OpenSSH 9.9, uitgevoerd met het root-account aan de verzendende kant. Alleen de serveradressen en accountnamen zijn vervangen door voorbeeldwaarden.
1ļøā£ Gebruik van scp en externe paden
Voor een pad op de externe server zet je [account@serveradres:]. Een pad zonder dubbele punt wordt gezien als een pad op de server waar je het commando uitvoert, dus de kant met de dubbele punt bepaalt of je verzendt of ontvangt.
Stuurt report.txt uit de huidige map naar de map scp-test onder de thuismap van de externe server.
scp report.txt user@203.0.113.10:~/scp-test/report.txt 100% 14 5.1KB/s 00:00Na de overdracht verschijnen bestandsnaam, voortgang, grootte, snelheid en duur op ƩƩn regel. Deze voortgangsweergave verschijnt alleen wanneer je in een terminal werkt. Stuur je de uitvoer door naar een bestand, dan blijft dat bestand dus leeg.
Om iets op te halen zet je het externe pad vooraan en het lokale opslagpad erachter.
scp user@203.0.113.10:~/scp-test/report.txt ./downloads/report.txt 100% 14 2.7KB/s 00:00Eindigt het bestemmingspad op een bestandsnaam in plaats van een map, dan wordt onder die naam opgeslagen. Na verzending met het commando hieronder stond report.txt in de ontvangende map als report-1028.txt.
scp report.txt user@203.0.113.10:~/scp-test/report-1028.txtreport.txt 100% 14 4.6KB/s 00:00š² Simulator van het scp-commando
In de simulator hieronder kun je zelf commando's voor verzenden, ontvangen en mappen kopiƫren invoeren en de uitvoer per optie bekijken.
2ļøā£ Opties van het scp-commando
Opties staan direct na scp, vóór de bron. -P voor de poort is een hoofdletter, de kleine -p behoudt tijden en rechten, dus als je de hoofdletter verwisselt, gebeurt er iets anders.
-l stelt de bovengrens van de overdrachtssnelheid in Kbit/s in. Zonder opties was een bestand van 20MB binnen 1 seconde overgezet.
scp backup.tar.gz user@203.0.113.10:~/scp-test/backup.tar.gz 100% 20MB 53.6MB/s 00:00-l 8000 komt neer op ongeveer 1,000KB per seconde. Met -l 8000 toonde de voortgangsweergave voor hetzelfde bestand 996.5KB/s en duurde de overdracht 20 seconden.
scp -l 8000 backup.tar.gz user@203.0.113.10:~/scp-test/backup-l.tar.gzbackup.tar.gz 100% 20MB 996.5KB/s 00:20-C comprimeert de gegevens op de SSH-verbinding op dezelfde manier als gzip. We verstuurden een logbestand van 19MB met herhaalde zinnen telkens drie keer, en tussen deze twee servers was de variant met -C iets trager.
| Commando | Bestand | Uitvoeringstijd | Snelheid in voortgangsweergave |
|---|---|---|---|
| scp backup.tar.gz | 20MB | 0,68 s | 53.6MB/s |
| scp -l 8000 backup.tar.gz | 20MB | 20.82 s | 996.5KB/s |
| scp access.log (3 keer) | 19MB | 0.79~0.89 s | ā |
| scp -C access.log (3 keer) | 19MB | 0.84~0.97 s | ā |
De uitvoeringstijd loopt van de start van het commando tot en met verbinden en het einde van de overdracht. Ook de ssh-handleiding zegt dat compressie helpt op trage lijnen en de overdracht op snelle netwerken vertraagt.
-v toont het verloop van verbinden tot overdracht als debug1-regels, dus daarmee zoek je de oorzaak als er geen verbinding komt of de authenticatie vastloopt. De uitvoer is lang, daarom hebben we met grep alleen de regels voor authenticatie en overdracht geselecteerd.
scp -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending subsystem: sftp
Transferred: sent 2536, received 3248 bytes, in 0.1 secondsDe regel [Sending subsystem: sftp] betekent dat scp het bestand via het SFTP-protocol heeft verstuurd. Vanaf OpenSSH 9.0 gebruikt scp standaard SFTP. Met -O wordt via het oude SCP-protocol overgedragen en verschijnt op dezelfde plek [Sending command: scp -v -t].
scp -O -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending command: scp -v -t ~/scp-test/
Sending file modes: C0600 14 report.txt
Transferred: sent 2328, received 3036 bytes, in 0.1 secondsš Belangrijkste opties: resultaten uit dit artikel
| Optie | Taak | Resultaat in dit artikel | |
|---|---|---|---|
| -P | Geeft de SSH-verbindingspoort op | Poort 22: report.txt overgezet, gesloten poort 2222: eindigde met [Connection timed out] | |
| -i | Geeft het privƩsleutelbestand voor authenticatie met een publieke sleutel op | report.txt overgezet met ~/.ssh/id_ed25519 opgegeven | |
| -r | Kopieert bestanden en submappen in de map | De mappen css en images blijven aan de ontvangende kant in de oorspronkelijke structuur staan; zonder de optie geen overdracht door de fout [not a regular file] | |
| -p | Behoudt de wijzigingstijd, toegangstijd en rechten van de bron | Wijzigingstijd behouden; aan de ontvangende kant in dit artikel bleef recht 600 alleen behouden bij het bestand dat met -O -p is verstuurd | |
| -C | Comprimeert de gegevens op de SSH-verbinding | Bij het log van 19MB tussen de twee servers in dit artikel was de variant met de optie iets trager | |
| -l | Stelt de bovengrens van de overdrachtssnelheid in Kbit/s in | Met -l 8000: 20MB op 996.5KB/s, 20.82 seconden | |
| -v | Toont het verloop van verbinden tot overdracht als debug1-regels | SFTP-overdracht bevestigd met de regel [Sending subsystem: sftp] | |
| -3 | Zet gegevens tussen twee externe servers over via de server die het commando uitvoert (standaard vanaf OpenSSH 8.7) | report.txt overgezet met twee mappen van dezelfde server als bron en bestemming | |
| -O | Zet over via het oude SCP-protocol | In de uitvoer van -v verschijnt [Sending command: scp -v -t]; paden met spaties hebben een extra backslash nodig | |
| -o | Geeft een optie in ssh_config-vorm door aan ssh | Wachttijd op 10 seconden gezet met ConnectTimeout=10 en [Connection timed out] bevestigd |
š Andere opties: volgens de officiĆ«le handleiding
| Optie | Taak | |
|---|---|---|
| -q | Schakelt de voortgangsweergave en de waarschuwingen en diagnostische meldingen van ssh uit | |
| -J | Verbindt eerst met een jump host en stelt vandaar TCP-doorsturing naar de eindbestemming in (verkorte vorm van de instelling ProxyJump, meerdere hops scheiden met komma's) | |
| -F | Geeft een ander bestand op als ssh-configuratiebestand per gebruiker (wordt rechtstreeks aan ssh doorgegeven) | |
| -4 | Dwingt het gebruik van alleen IPv4-adressen af | |
| -6 | Dwingt het gebruik van alleen IPv6-adressen af |
3ļøā£ Mappen kopiĆ«ren met scp en tijden behouden
Geef je een map op zonder optie, dan meldt scp dat het geen gewoon bestand is en voert het de overdracht niet uit.
scp site-files user@203.0.113.10:~/scp-test/scp: local "site-files" is not a regular file
scp: failed to upload file site-files to ~/scp-test/Met -r worden de bestanden en submappen in de map gekopieerd.
scp -r site-files user@203.0.113.10:~/scp-test/logo.png 100% 48KB 4.7MB/s 00:00
style.css 100% 15 5.0KB/s 00:00
index.html 100% 15 5.2KB/s 00:00De uitvoer toont alleen bestandsnamen. In de find-uitvoer aan de ontvangende kant stonden onder site-files de mappen css en images in de oorspronkelijke structuur.
ssh user@203.0.113.10 'cd ~/scp-test && find site-files'site-files
site-files/images
site-files/images/logo.png
site-files/index.html
site-files/css
site-files/css/style.css-r volgt symbolische koppelingen in de map en kopieert de oorspronkelijke bestanden, dus voor mappen waarin koppelingen koppelingen moeten blijven, past rsync -a beter.
-p behoudt de wijzigingstijd, toegangstijd en rechten van de bron. Vóór het verzenden hebben we de wijzigingstijd van het bronbestand report.txt op 1 oktober 2026 00:00 (UTC) en de rechten op 600 gezet. De tijdzone van de ontvangende server is UTC, daarom is ook ls aan de verzendende kant met TZ=UTC uitgevoerd.
TZ=UTC ls -l report.txt-rw------- 1 root root 14 Oct 1 00:00 report.txtscp -p report.txt user@203.0.113.10:~/scp-test/report-p.txtreport.txt 100% 14 4.7KB/s 00:00scp -O -p report.txt user@203.0.113.10:~/scp-test/report-Op.txtreport.txt 100% 14 4.2KB/s 00:00ssh user@203.0.113.10 'ls -l ~/scp-test/report.txt ~/scp-test/report-p.txt ~/scp-test/report-Op.txt'-rw------- 1 user user 14 Oct 1 00:00 /home/user/scp-test/report-Op.txt
-rw-rw-r-- 1 user user 14 Oct 1 00:00 /home/user/scp-test/report-p.txt
-rw-rw-r-- 1 user user 14 Oct 28 06:17 /home/user/scp-test/report.txtreport-p.txt (verstuurd met -p) en report-Op.txt (verstuurd met -O -p) behielden de oorspronkelijke tijd, report.txt zonder opties werd opgeslagen met de verzendtijd. Op de ontvangende server kregen bestanden die via SFTP zijn verstuurd ook met -p de rechten 664, en alleen het bestand dat via het oude SCP-protocol (-O) is verstuurd behield 600.
Controleer daarom bij bestanden waarvan de rechten gelijk moeten zijn aan de bron na het verzenden de rechten met ls -l aan de ontvangende kant.
4ļøā£ Poort en sleutelbestand opgeven bij scp
Bij servers die niet bereikbaar zijn met standaardpoort 22 en de standaardsleutel geef je de poort en sleutel vóór het verzenden zelf op. -P geeft de SSH-verbindingspoort op en -i het privésleutelbestand voor authenticatie met een publieke sleutel.
Hieronder staat een voorbeeld dat poort 22 en een sleutelbestand rechtstreeks opgeeft. Op een server met een gewijzigde poort schrijf je dat nummer in plaats van 22.
scp -P 22 -i ~/.ssh/id_ed25519 report.txt user@203.0.113.10:~/scp-test/report.txt 100% 14 5.3KB/s 00:00Zonder -i worden net als bij ssh de sleutels met standaardnamen onder ~/.ssh (id_rsa, id_ecdsa, id_ed25519 enz.) om de beurt gebruikt.
Verstuur je vaak naar dezelfde server, zet dan een alias in ~/.ssh/config en typ in scp alleen die alias.
Host myserver
HostName 203.0.113.10
User user
Port 22
IdentityFile ~/.ssh/id_ed25519De naam op de Host-regel wordt de alias, en de vier regels eronder vervangen het serveradres, account, de poort en het sleutelbestand. Ook het commando met alleen de alias eindigde met hetzelfde resultaat van ƩƩn regel als met volledig adres en sleutel.
scp report.txt myserver:~/scp-test/report.txt 100% 14 4.2KB/s 00:00-P, -i en aliassen gebruiken allemaal gewoon de ssh-verbindingsinstellingen, dus ook een sleutel maken en op de server registreren gaat hetzelfde als bij verbinden met het SSH-commando.
5ļøā£ KopiĆ«ren tussen servers met scp
Ook als bron en bestemming allebei externe servers zijn, volstaat ƩƩn regel scp. Vanaf OpenSSH 8.7 worden de gegevens via de server overgezet die het commando uitvoert, en die methode is -3. De officiƫle release notes noemen als reden voor de nieuwe standaard dat de inloggegevens van de bestemmingsserver niet op de bronserver hoeven te staan.
De meting hieronder is uitgevoerd met twee mappen van dezelfde server als bron en bestemming. Is de bestemmingsserver een andere, dan pas je alleen het account en adres aan het eind aan.
scp -3 user@203.0.113.10:~/scp-test/report.txt user@203.0.113.10:~/scp-test/copy3/report.txt 100% 14 2.5KB/s 00:00Het is alsof het hoofdkantoor documenten tussen twee filialen ontvangt en weer doorstuurt.
De vroegere methode, waarbij de bronserver rechtstreeks naar de bestemmingsserver verstuurt, geef je op met -R. Daarvoor moet de bronserver zonder wachtwoord met de bestemmingsserver kunnen verbinden. Vanaf OpenSSH 10.6 toont -R een waarschuwing dat de optie wordt afgeschaft, en latere versies zullen deze optie negeren en met de methode -3 kopiƫren.
6ļøā£ scp en rsync vergeleken
Voor een paar bestanden die je ƩƩn keer verstuurt, is scp genoeg. Wil je dezelfde map herhaaldelijk gelijktrekken of een onderbroken overdracht hervatten, dan past het rsync-commando. scp verstuurt bij elke uitvoering alle opgegeven bestanden opnieuw, rsync vergelijkt bron en bestemming en zet alleen gewijzigde bestanden over.
| Onderdeel | scp | rsync |
|---|---|---|
| Overdrachtsomvang | Bij elke uitvoering alle opgegeven bestanden | Alleen bestanden die afwijken van de bron |
| Half ontvangen bestanden bewaren (--partial) | ā | ā |
| Bestanden verwijderen die niet in de bron staan (--delete) | ā | ā |
| Symbolische koppelingen | Volgt ze en kopieert de bestanden | Met -a blijven koppelingen behouden |
| Nodig aan de ontvangende kant | SSH-toegang en SFTP-server | rsync aan beide kanten geĆÆnstalleerd |
7ļøā£ Foutmeldingen van het scp-commando en oplossingen
Als scp mislukt, staat de oorzaak meteen op de eerste regel van de uitvoer. In alle drie de gevallen waarin we bewust een fout veroorzaakten met een ontbrekend bestand, schrijfrechten en een verkeerde poort, stond de oorzaak op de eerste regel en was de exitcode steeds niet 0.
š² No such file or directory
Probeer je een bestand op te halen dat aan de externe kant niet bestaat, dan verschijnt [No such file or directory] samen met het pad.
scp user@203.0.113.10:~/scp-test/nofile.txt ./downloads/scp: ~/scp-test/nofile.txt: No such file or directoryBij verzenden geeft een ontbrekende bestemmingsmap dezelfde fout. scp maakt geen ontbrekende mappen aan, dus voer eerst via ssh mkdir -p uit om de map te maken.
scp report.txt user@203.0.113.10:~/scp-test/nodir/sub/scp: dest open "scp-test/nodir/sub/": No such file or directory
scp: failed to upload file report.txt to ~/scp-test/nodir/sub/š² Permission denied
Heeft de ontvangende map geen schrijfrecht, dan volgt [Permission denied] na [dest open]. Hieronder staat het resultaat van verzenden naar een map readonly met rechten 555.
scp report.txt user@203.0.113.10:~/scp-test/readonly/scp: dest open "scp-test/readonly/report.txt": Permission denied
scp: failed to upload file report.txt to ~/scp-test/readonly/Staat [account@serveradres:] vóór [Permission denied] en staat tussen haakjes een authenticatiemethode zoals publickey, dan is de verbinding bij de authenticatie geweigerd. Deze melding is de vorm die het programma ssh gebruikt als authenticatie mislukt, dus controleer eerst het met -i opgegeven sleutelbestand en de op de server geregistreerde publieke sleutel.
š² Connection timed out
Is het poortnummer fout of blokkeert een firewall die poort zodat er geen antwoord komt, dan wacht scp op de verbinding en eindigt het met [Connection timed out]. Hieronder staat het resultaat van verzenden naar de gesloten poort 2222 met een wachttijd van 10 seconden.
scp -P 2222 -o ConnectTimeout=10 report.txt user@203.0.113.10:~/scp-test/ssh: connect to host 203.0.113.10 port 2222: Connection timed out
scp: Connection closedKrijg je deze fout, controleer dan eerst of het nummer bij -P overeenkomt met de SSH-poort van de server.
š² Spaties en de tilde (~) in paden
Bij de huidige scp, die via SFTP overzet, hoef je een extern pad met spaties maar ƩƩn keer tussen enkele aanhalingstekens te zetten.
scp report.txt 'user@203.0.113.10:~/scp-test/my files/'report.txt 100% 14 4.7KB/s 00:00Toen we hetzelfde commando met -O via het oude SCP-protocol verstuurden, mislukte het met [ambiguous target]. Bij het oude SCP-protocol interpreteert de externe shell het pad namelijk nog een keer.
scp -O report.txt 'user@203.0.113.10:~/scp-test/my files/'scp: ambiguous targetZet in dat geval een backslash vóór de spatie, zodat ook de externe shell het als één woord leest.
scp -O report.txt 'user@203.0.113.10:~/scp-test/my\ files/'report.txt 100% 14 4.5KB/s 00:00Begint het pad na de dubbele punt zonder slash of tilde, dan wordt het verwerkt ten opzichte van de thuismap van het externe account.
scp report.txt user@203.0.113.10:scp-test/report-rel.txtreport.txt 100% 14 5.6KB/s 00:00De officiƫle handleiding zegt -O te gebruiken als een oude SFTP-server een pad dat met een tilde begint niet naar de thuismap kan omzetten. In dat geval komt een pad ten opzichte van de thuismap zonder tilde, zoals hierboven, ook op dezelfde plek terecht.
š¢ FAQ & aanbevolen content











ā¹ļø Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaaltĀ (bij acties gaat het omlaag ā)Ā wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.