scp

Bezpiecznie kopiuje pliki między komputerami przez SSH.

scp (secure copy) to narzędzie z pakietu OpenSSH do kopiowania plików między komputerami po szyfrowanym kanale SSH. Działa jak zwykłe cp, tylko że jedna ze stron (albo obie) siedzi na innej maszynie i dogadujesz się z nią przez sieć. Sięgasz po niego, gdy chcesz wrzucić plik na serwer, ściągnąć logi z produkcji albo przerzucić katalog z jednego hosta na drugi — bez FTP, bez montowania dysków, na tym samym porcie 22 co SSH i z tymi samymi kluczami. Dobrze wiedzieć, że od OpenSSH 9.0 scp pod spodem korzysta z protokołu SFTP, więc zachowanie odrobinę różni się od starych poradników, ale sama składnia została ta sama.

Składnia i najważniejsze opcje

Podstawowy schemat: scp [OPCJE] źródło cel, gdzie zdalną lokalizację zapisujesz jako użytkownik@host:/ścieżka.

  • -r — kopiuje katalogi rekurencyjnie (bez tego scp odmówi ruszenia folderu).
  • -P portport zdalnego hosta. Wielka litera, bo małe -p jest już zajęte.
  • -p — zachowuje czasy modyfikacji, dostępu i uprawnienia pliku.
  • -i klucz — wskazuje plik z kluczem prywatnym do uwierzytelnienia.
  • -C — włącza kompresję w locie (przydatne przy wolnym łączu i plikach tekstowych).
  • -l limit — ogranicza pasmo, podane w Kbit/s (nie kB/s — łatwo się naciąć).
  • -3 — przy kopiowaniu między dwoma zdalnymi hostami przepuszcza ruch przez Twoją maszynę.
  • -v — tryb gadatliwy, ratunek gdy połączenie nie chce zadziałać.

Przykłady użycia

  • scp raport.pdf user@serwer:/home/user/ — wysyła lokalny plik do katalogu domowego na serwerze.
  • scp user@serwer:/var/log/nginx/error.log . — pobiera log ze zdalnego hosta do bieżącego katalogu (kropka na końcu).
  • scp -r ./projekt user@serwer:/var/www/ — kopiuje cały katalog projekt wraz z zawartością.
  • scp -P 2222 -i ~/.ssh/id_ed25519 backup.tar.gz user@serwer:/backup/ — łączy się na niestandardowym porcie z konkretnym kluczem.
  • scp -3 user1@hostA:/dane.csv user2@hostB:/import/ — przerzuca plik prosto z jednego serwera na drugi przez Twój komputer.

Częste błędy i pułapki

Najpopularniejszy klasyk to mylenie -P z -p — na serwerze z nietypowym portem SSH dostaniesz Connection refused, bo wielkość litery ma tu znaczenie. Druga pułapka: zapomniany dwukropek. scp plik user@host /katalog (spacja zamiast host:/katalog) potraktuje ostatni argument jako lokalną ścieżkę i po prostu skopiuje pliki lokalnie, zamiast wysłać je na serwer. Pamiętaj też, że bez -r katalogów nie ruszysz, a spacje i znaki specjalne w zdalnych ścieżkach trzeba cudzysłować, bo interpretuje je powłoka po obu stronach. Uważaj na nadpisywanie — scp nie pyta o potwierdzenie i cicho zastąpi istniejący plik po drugiej stronie. Przy dużych transferach jest wolniejszy od rsync i nie wznawia przerwanego kopiowania — zaczyna od zera.

Powiązane komendy: rsync (szybszy, wznawialny transfer), sftp (interaktywne przesyłanie po SSH), ssh (samo połączenie), cp (lokalne kopiowanie) oraz ssh-copy-id do wgrywania kluczy.