scp command – Secure copy

Scp (Secure Copy) is een command line tool om bestanden te kopiëren of over te zetten tussen hosts. Het gebruikt hetzelfde soort beveiligingsmechanisme als het ssh programma.

In feite gebruikt het een ssh-verbinding op de achtergrond om de bestandsoverdracht uit te voeren. scp verwijst zowel naar het “protocol” dat definieert hoe secure copy zou moeten werken als naar het “programma” (commando) dat is geïnstalleerd als onderdeel van de OpenSSH suite van tools.

In deze korte tutorial zullen we een paar voorbeelden bekijken van het scp commando en hoe het gebruikt kan worden om bestanden veilig over te zetten.

Hoe installeer je scp

Scp is over het algemeen standaard geïnstalleerd op de meeste Linux distro’s als onderdeel van openssh packages. Op ubuntu/debian bijvoorbeeld, levert het openssh-client pakket het scp programma.

$ dpkg -L openssh-client | grep scp/usr/bin/scp/usr/share/man/man1/scp.1.gz

Het is het OpenSSH pakket dat de ssh, scp, sftp programma’s levert samen met vele andere gereedschappen. Dus we hoeven hier niets extra’s te doen, behalve het programma te gebruiken en te leren.

Het gebruik van scp – basis syntax

De basis syntax van scp is heel eenvoudig om te onthouden. Het ziet er als volgt uit

$ scp source_file_path destination_file_path

Het bestandspad moet, afhankelijk van de host, het volledige hostadres, het poortnummer, de gebruikersnaam en het wachtwoord bevatten, samen met het pad naar de map.

Dus als u een bestand “verstuurt” van uw lokale machine naar een machine op afstand (uploaden), ziet de syntax er als volgt uit

$ scp ~/my_local_file.txt _host.com:/some/remote/directory

Wanneer u een bestand kopieert van een host op afstand naar een lokale host (downloaden), ziet het er precies omgekeerd uit

$ scp _host.com:/some/remote/directory ~/my_local_file.txt# just download the file$ scp :/some/path/file.txt .

Dat is zo’n beetje het gebruik van scp voor gewone taken. Afgezien daarvan zijn er een paar extra opties en functies die scp ondersteunt. Laten we daar eens een kort overzicht van maken.

En ja, standaard zal scp altijd bestanden overschrijven op de bestemming. Als u dat wilt vermijden, gebruik dan een krachtiger gereedschap genaamd rsync.

scp commando voorbeelden

1. Verbose uitvoer

Met verbose uitvoer, zou het scp programma veel informatie uitvoeren over wat het op de achtergrond doet. Dit is vaak nuttig wanneer het programma faalt of niet in staat is om het verzoek te voltooien. De verbose uitvoer zou dan het exacte punt aangeven waar het programma tegen problemen aanliep.

$ scp -v ~/test.txt :/root/help2356.txtExecuting: program /usr/bin/ssh host 192.168.1.3, user root, command scp -v -t /root/help2356.txtOpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013debug1: Reading configuration data /home/enlightened/.ssh/configdebug1: Reading configuration data /etc/ssh/ssh_configdebug1: /etc/ssh/ssh_config line 19: Applying options for *debug1: Connecting to 192.168.1.3 port 22.debug1: Connection established...... OUTPUT TRUNCATED

De uitvoer zou groot zijn en gedetailleerde informatie bevatten over hoe de verbinding wordt gemaakt, welke configuratie- en identiteitsbestanden worden gebruikt enzovoort.

2. Kopieer meerdere bestanden

Meerdere bestanden kunnen worden gespecificeerd gescheiden door een spatie zoals dit

$ scp foo.txt bar.txt :/path/directory/

Om meerdere bestanden te kopiëren van host op afstand naar de huidige lokale directory

$ scp :/path/directory/\{foo.txt,bar.txt\} .$ scp :~/\{abc.log,cde.txt\} .

3. Kopieer hele directory (recursief)

Om een hele directory van de ene host naar de andere te kopiëren gebruikt u de r switch en specificeert u de directory

$ scp -v -r ~/Downloads :/root/Downloads

4. Kopieer bestanden over 2 hosts op afstand

Scp kan ook bestanden kopiëren van 1 host op afstand naar een andere host op afstand.

$ scp :/some/remote/dir/foobar.txt :/some/remote/dir/

5. Versnel de overdracht met compressie

Een supercoole optie om de overdracht te versnellen om tijd en bandbreedte te besparen. Het enige wat u hoeft te doen is de C optie te gebruiken om compressie in te schakelen. De bestanden worden tijdens de overdracht gecomprimeerd en op de bestemming gedecomprimeerd.

$ scp -vrC ~/Downloads :/root/Downloads

In het bovenstaande voorbeeld hebben we de hele directory verplaatst met compressie ingeschakeld. De snelheidswinst zou afhangen van hoeveel de bestanden konden worden gecomprimeerd.

6. Beperk het bandbreedte gebruik

Als u niet wilt dat scp de gehele beschikbare bandbreedte in beslag neemt, gebruik dan de l optie om de maximum snelheid in Kbit/s te beperken.

$ scp -vrC -l 400 ~/Downloads :/root/Downloads

7. Maak verbinding met een ander poortnummer op de host

Als de server op afstand een ssh daemon op een andere poort heeft draaien (standaard 22), dan moet u scp vertellen dat specifieke poortnummer te gebruiken met de ‘-P’ optie.

$ scp -vC -P 2200 ~/test.txt :/some/path/test.txt

8. Bestandsattributen behouden

De ‘-p’ optie (kleine letters), zou modificatietijden, toegangstijden, en modi van het originele bestand behouden.

$ scp -C -p ~/test.txt :/some/path/test.txt

9. Stille modus

In stille modus (‘-q’ optie ), wordt de scp uitvoer onderdrukt, en wordt de voortgangsmeter uitgeschakeld, evenals waarschuwings- en diagnostische berichten.

$ scp -vCq ~/test.txt :/some/path/test.txt

10. Geef identiteitsbestand op

Wanneer u sleutel-gebaseerde (wachtwoordloze) authenticatie gebruikt, moet u het identiteitsbestand opgeven dat de private sleutel bevat. Deze optie wordt direct doorgegeven aan het ssh commando en werkt op dezelfde manier.

$ scp -vCq -i private_key.pem ~/test.txt :/some/path/test.txt

11. Gebruik een ander ssh_config bestand

Gebruik de ‘-F’ optie om een ander ssh_config bestand op te geven.

$ scp -vC -F /home/user/my_ssh_config ~/test.txt :/some/path/test.txt

12. Gebruik een andere cipher

Scp gebruikt standaard de AES cipher/encryptie. Soms wilt u misschien een ander cijfer gebruiken. Het gebruik van een ander cijfer kan het overdrachtsproces versnellen. Van blowfish en arcfour is bijvoorbeeld bekend dat ze sneller zijn dan AES (maar minder veilig).

$ scp -c blowfish -C ~/local_file.txt :/remote/path/file.txt

In het bovenstaande voorbeeld gebruiken we het blowfish cijfer samen met compressie. Dit kan een aanzienlijke snelheidswinst opleveren, afhankelijk van de beschikbare bandbreedte.

Samenvatting

Hoewel scp zeer efficiënt is in het veilig overzetten van bestanden, mist het de noodzakelijke eigenschappen van een bestandssynchronisatie-tool. Het enige wat het kan doen is alle genoemde bestanden kopiëren en plakken van de ene locatie naar de andere.

Een krachtiger gereedschap is Rsync dat niet alleen alle functies van scp heeft, maar nog meer functies toevoegt om bestanden op intelligente wijze te synchroniseren tussen 2 hosts. Het kan bijvoorbeeld alleen de gewijzigde bestanden controleren en uploaden, bestaande bestanden negeren, enzovoort.