15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
28.10.2024

Kopiowanie plików przez SSH: Kompletny przewodnik po SCP, rsync i SFTP

SSH (Secure Shell) to podstawa bezpiecznego zdalnego zarządzania serwerem. Niezależnie od tego, czy jesteś programistą wdrażającym kod, administratorem systemów zarządzającym infrastrukturą, czy zaawansowanym użytkownikiem utrzymującym środowisko VPS Hosting, bezpieczne przesyłanie plików między maszynami to zadanie, które będziesz wykonywać nieustannie.

Ten kompleksowy przewodnik omawia wszystkie główne metody kopiowania plików przez SSH — w tym SCP, rsync, SFTP i automatyzację opartą na kluczach — z rzeczywistą składnią, praktycznymi przykładami i wskazówkami ekspertów, które pomogą Ci pracować szybciej i bezpieczniej.

Dlaczego warto używać SSH do transferu plików?

Zanim przejdziemy do narzędzi, warto zrozumieć, dlaczego transfer plików oparty na SSH jest branżowym standardem zarówno dla administratorów serwerów, jak i programistów.

  • Szyfrowanie end-to-end: Każdy bajt danych — w tym dane uwierzytelniające, polecenia i zawartość plików — jest szyfrowany podczas przesyłania przy użyciu nowoczesnych algorytmów kryptograficznych. Dzięki temu transfery SSH są odporne na podsłuchiwanie pakietów i ataki man-in-the-middle.
  • Brak dodatkowego oprogramowania: SSH jest preinstalowany praktycznie na każdym systemie Linux/Unix i jest natywnie dostępny w systemach Windows 10+ oraz macOS.
  • Wszechstronność: Pojedyncze połączenie SSH może obsługiwać interaktywne sesje powłoki, transfery plików, przekierowanie portów i automatyczne skrypty.
  • Przyjazność dla automatyzacji: SSH bezproblemowo integruje się z zadaniami cron, potokami CI/CD i skryptami kopii zapasowych, umożliwiając w pełni zautomatyzowane, bezhasłowe transfery plików.
  • Niezawodność: Połączenia SSH sprawnie radzą sobie z przerwami w sieci, szczególnie w połączeniu z narzędziami takimi jak rsync.

Metoda 1: Kopiowanie plików za pomocą SCP (Secure Copy Protocol)

SCP to najprostsze i najszerzej stosowane narzędzie do jednorazowych transferów plików przez SSH. Działa poprzez wykorzystanie istniejącego połączenia SSH do bezpiecznego kopiowania plików między hostami.

Podstawowa składnia SCP

scp [options] [source] [destination]

Przykład 1: Przesłanie pliku z lokalnej maszyny na zdalny serwer

scp /path/to/local/file username@remote_host:/path/to/remote/destination

Omówienie:

    /path/to/local/file — plik, który chcesz przesłać z lokalnej maszyny
    username@remote_host — Twoja nazwa użytkownika SSH oraz nazwa hosta lub adres IP serwera
    /path/to/remote/destination — docelowy katalog lub ścieżka pliku na zdalnym serwerze
    
    Przykład 2: Pobranie pliku ze zdalnego serwera na lokalną maszynę
    scp username@remote_host:/path/to/remote/file /path/to/local/destination
    Wystarczy zamienić źródło i cel miejscami, aby pobrać plik z serwera na lokalną maszynę.
    Przykład 3: Kopiowanie całego katalogu rekurencyjnie
    scp -r /path/to/local/directory username@remote_host:/path/to/remote/destination
    Flaga -r nakazuje SCP rekurencyjne skopiowanie katalogu wraz z całą jego zawartością, w tym zagnieżdżonymi podkatalogami.
    Przydatne opcje SCP
    
    
    
    
    Opcja
    Opis
    
    
    
    
    -P [port]
    Określ niestandardowy port SSH (uwaga: wielka litera -P, w przeciwieństwie do małej litery -p w SSH)
    
    
    -C
    Włącz kompresję dla szybszych transferów przez wolne połączenia
    
    
    -i [identity_file]
    Użyj określonego prywatnego klucza SSH do uwierzytelniania
    
    
    -l [limit]
    Ogranicz wykorzystanie przepustowości w Kbit/s
    
    
    -q
    Tryb cichy — ukryj dane wyjściowe postępu
    
    
    -v
    Tryb szczegółowy — przydatny do debugowania problemów z połączeniem
    
    
    
    
    Kiedy używać SCP
    SCP jest idealny do szybkich, jednorazowych transferów plików, gdzie liczy się prostota. Nie wymaga konfiguracji i działa od razu na każdym systemie z zainstalowanym SSH. Jednak w przypadku dużych katalogów lub powtarzających się transferów, rsync jest znacznie lepszym wyborem.
    Metoda 2: Kopiowanie plików za pomocą rsync
    rsync to wybór profesjonalistów do synchronizacji i transferu plików przez SSH. Jego kluczową funkcją jest transfer różnicowy: zamiast kopiować całe pliki, rsync analizuje źródło i cel, a następnie przesyła tylko zmienione fragmenty. Oszczędza to ogromną ilość czasu i przepustowości podczas pracy z dużymi plikami lub katalogami, które są często aktualizowane.
    Podstawowa składnia rsync
    rsync [options] [source] [destination]
    Przykład 1: Przesłanie pliku z lokalnej maszyny na zdalny serwer
    rsync -avz /path/to/local/file username@remote_host:/path/to/remote/destination
    Przykład 2: Synchronizacja całego katalogu ze zdalnym serwerem
    rsync -avz /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
    > Ważne: Zwróć uwagę na końcowy ukośnik / po katalogu źródłowym. Z końcowym ukośnikiem rsync kopiuje *zawartość* katalogu. Bez niego rsync kopiuje sam katalog jako podkatalog miejsca docelowego.
    Przykład 3: Tworzenie lustrzanej kopii katalogu (usuwanie plików usuniętych ze źródła)
    rsync -avz --delete /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
    Flaga --delete zapewnia, że pliki usunięte ze źródła są również usuwane z miejsca docelowego, utrzymując obie lokalizacje w idealnej synchronizacji.
    Przykład 4: Użycie niestandardowego portu SSH
    rsync -avz -e "ssh -p 2222" /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
    Przydatne opcje rsync
    
    
    
    
    Opcja
    Opis
    
    
    
    
    -a
    Tryb archiwum: zachowuje uprawnienia, znaczniki czasu, dowiązania symboliczne i własność
    
    
    -v
    Szczegółowy: wyświetla postęp transferu plik po pliku
    
    
    -z
    Kompresja: zmniejsza ilość danych przesyłanych przez sieć
    
    
    --delete
    Usuwa pliki w miejscu docelowym, które nie istnieją już w źródle
    
    
    --progress
    Wyświetla postęp w czasie rzeczywistym dla każdego pliku
    
    
    --exclude
    Wyklucz określone pliki lub wzorce (np. --exclude '*.log')
    
    
    -n lub --dry-run
    Symuluje transfer bez faktycznego kopiowania czegokolwiek
    
    
    -e "ssh -p [port]"
    Określ niestandardowy port SSH
    
    
    --bwlimit=[KB/s]
    Ogranicz prędkość transferu, aby uniknąć przeciążenia połączenia
    
    
    
    
    Kiedy używać rsync
    Używaj rsync do kopii zapasowych, wdrożeń i wszelkich powtarzających się zadań synchronizacji. Jest szczególnie wydajny przy zarządzaniu dużymi bazami kodu, bibliotekami multimediów lub eksportami baz danych na Serwerze Dedykowanym, gdzie wydajność przepustowości i integralność danych są kluczowe.
    Metoda 3: Kopiowanie plików między dwoma zdalnymi serwerami
    Mniej znana, ale niezwykle przydatna możliwość zarówno SCP, jak i rsync to zdolność do przesyłania plików bezpośrednio między dwoma zdalnymi serwerami — bez kierowania danych przez lokalną maszynę. Jest to nieocenione przy migracji serwerów lub synchronizacji danych między instancjami w chmurze.
    Kopiowanie plików między dwoma zdalnymi serwerami za pomocą SCP
    scp username1@remote_host1:/path/to/file username2@remote_host2:/path/to/destination
    Kopiowanie plików między dwoma zdalnymi serwerami za pomocą rsync
    rsync -avz username1@remote_host1:/path/to/source/ username2@remote_host2:/path/to/destination/
    > Uwaga: Aby transfery między serwerami działały, serwer źródłowy musi być w stanie nawiązać połączenie SSH z serwerem docelowym. Może być konieczne skonfigurowanie kluczy SSH na serwerze źródłowym lub użycie przekazywania agenta SSH (ssh -A).
    Transfer między serwerami przez tunelowanie SSH (metoda alternatywna)
    Jeśli bezpośrednie SSH między serwerami nie jest możliwe ze względu na ograniczenia zapory sieciowej, możesz przeprowadzić transfer przez lokalną maszynę używając tar i ssh:
    ssh username1@remote_host1 "tar czf - /path/to/source" | ssh username2@remote_host2 "tar xzf - -C /path/to/destination"
    Przesyła to skompresowane archiwum z serwera 1 bezpośrednio do serwera 2 przez lokalną sesję terminala.
    Metoda 4: Kopiowanie plików za pomocą SFTP (SSH File Transfer Protocol)
    SFTP zapewnia interaktywne, podobne do FTP doświadczenie przez szyfrowane połączenie SSH. W przeciwieństwie do SCP, który jest narzędziem jednokomendowym, SFTP otwiera trwałą sesję, w której możesz przeglądać katalogi, przesyłać, pobierać, zmieniać nazwy i usuwać pliki interaktywnie.
    Uruchamianie sesji SFTP
    sftp username@remote_host
    Zostaniesz przeniesiony do wiersza poleceń SFTP (sftp>), z którego możesz uruchamiać następujące polecenia:
    Podstawowe polecenia SFTP
    
    
    
    
    Polecenie
    Opis
    
    
    
    
    ls
    Wyświetl pliki w bieżącym zdalnym katalogu
    
    
    lls
    Wyświetl pliki w bieżącym lokalnym katalogu
    
    
    cd /remote/path
    Zmień zdalny katalog
    
    
    lcd /local/path
    Zmień lokalny katalog
    
    
    put /local/file /remote/destination
    Prześlij plik na zdalny serwer
    
    
    get /remote/file /local/destination
    Pobierz plik ze zdalnego serwera
    
    
    mput *.txt
    Prześlij wiele plików pasujących do wzorca
    
    
    mget *.log
    Pobierz wiele plików pasujących do wzorca
    
    
    mkdir /remote/newdir
    Utwórz katalog na zdalnym serwerze
    
    
    rm /remote/file
    Usuń plik na zdalnym serwerze
    
    
    exit lub quit
    Zamknij sesję SFTP
    
    
    
    
    Łączenie się z niestandardowym portem SSH przez SFTP
    sftp -P 2222 username@remote_host
    Kiedy używać SFTP
    SFTP najlepiej nadaje się do interaktywnych sesji zarządzania plikami — na przykład gdy potrzebujesz przeglądać strukturę zdalnych katalogów, selektywnie pobierać pliki dzienników lub przesyłać pliki konfiguracyjne na serwer WWW. Wiele klientów GUI (takich jak FileZilla, Cyberduck i WinSCP) używa SFTP jako podstawowego protokołu, co czyni go dostępnym również dla użytkowników nieposiadających wiedzy technicznej.
    Metoda 5: Automatyzacja transferów plików z uwierzytelnianiem kluczem SSH
    Ręczne wprowadzanie hasła przy każdym transferze pliku jest nieefektywne i niekompatybilne z automatyzacją. Uwierzytelnianie oparte na kluczach SSH rozwiązuje ten problem, umożliwiając bezhasłowe, kryptograficznie bezpieczne logowania — warunek wstępny dla każdego zautomatyzowanego przepływu pracy tworzenia kopii zapasowych lub wdrożeń.
    Krok 1: Wygeneruj parę kluczy SSH
    Na lokalnej maszynie uruchom:
    ssh-keygen -t ed25519 -C "your_email@example.com"
    > Uwaga: ed25519 to nowoczesny, zalecany algorytm. Użyj -t rsa -b 4096 jeśli potrzebujesz zgodności ze starszymi systemami.
    Postępuj zgodnie z instrukcjami, aby zapisać klucz (domyślna lokalizacja: ~/.ssh/id_ed25519) i opcjonalnie ustaw hasło dla dodatkowego bezpieczeństwa.
    Krok 2: Skopiuj klucz publiczny na zdalny serwer
    ssh-copy-id username@remote_host
    Spowoduje to dołączenie klucza publicznego do pliku ~/.ssh/authorized_keys na zdalnym serwerze. Zostaniesz poproszony o hasło po raz ostatni.
    Jeśli ssh-copy-id nie jest dostępne, możesz to zrobić ręcznie:
    cat ~/.ssh/id_ed25519.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
    Krok 3: Przetestuj uwierzytelnianie bezhasłowe
    ssh username@remote_host
    Jeśli połączysz się bez monitu o hasło, uwierzytelnianie oparte na kluczach działa poprawnie.
    Krok 4: Automatyzuj transfery za pomocą skryptu powłoki
    Po skonfigurowaniu bezhasłowego SSH możesz teraz automatyzować transfery plików w zadaniach cron lub skryptach:
    #!/bin/bash
    # Daily backup script
    rsync -avz --delete /var/www/html/ username@backup_server:/backups/www/
    Dodaj to do swojego crontab (crontab -e), aby uruchamiać co noc:
    0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
    Rozwiązywanie typowych problemów z transferem plików przez SSH
    Nawet doświadczeni administratorzy napotykają problemy. Oto najczęstsze problemy i ich rozwiązania:
    Odmowa dostępu (publickey)
    
    Sprawdź, czy klucz publiczny jest poprawnie dodany do ~/.ssh/authorized_keys na zdalnym serwerze
    Sprawdź, czy ~/.ssh ma uprawnienia 700, a authorized_keys ma uprawnienia 600
  • Potwierdź, że demon SSH zezwala na uwierzytelnianie kluczem (PubkeyAuthentication yes w /etc/ssh/sshd_config)
  • Odmowa połączenia

    • Sprawdź, czy usługa SSH działa: systemctl status sshd
    • Sprawdź, czy używany jest właściwy port
    • Przejrzyj reguły zapory sieciowej: ufw status lub iptables -L

    Prędkość transferu jest niska

    • Włącz kompresję: dodaj -C do SCP lub -z do rsync
    • Użyj szybszego szyfru: ssh -c aes128-ctr (mniej bezpieczny, ale szybszy przy połączeniach o dużym opóźnieniu)
    • W przypadku dużych transferów rozważ rsync z --bwlimit, aby uniknąć przeciążenia sieci

    Weryfikacja klucza hosta nie powiodła się

    • Odcisk palca SSH zdalnego serwera uległ zmianie (może to wskazywać na problem z bezpieczeństwem lub przebudowę serwera)
    • Usuń stary klucz: ssh-keygen -R remote_host
    • Połącz się ponownie i zweryfikuj nowy odcisk palca przed jego zaakceptowaniem

    Wybór odpowiedniego narzędzia: SCP vs. rsync vs. SFTP

    FunkcjaSCPrsyncSFTP
    Łatwość użycia⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
    Transfery różnicowe
    Synchronizacja katalogów✅ (rekurencyjnie)✅ (z --delete)✅ (ręcznie)
    Tryb interaktywny
    Automatyzacja✅ (ze skryptami)
    Wydajność przepustowościNiskaWysokaNiska
    Najlepszy doSzybkich jednorazowych transferówKopii zapasowych i synchronizacjiInteraktywnego przeglądania

    Zabezpieczanie transferów plików przez SSH: najlepsze praktyki

    Niezależnie od używanego narzędzia, stosuj te najlepsze praktyki bezpieczeństwa, aby chronić swoje serwery i dane:

    1. Wyłącz uwierzytelnianie hasłem — Używaj wyłącznie kluczy SSH i ustaw PasswordAuthentication no w /etc/ssh/sshd_config
    2. Zmień domyślny port SSH — Odejście od portu 22 znacznie zmniejsza liczbę zautomatyzowanych prób brute-force
    3. Używaj fail2ban — Automatycznie blokuj adresy IP, które wielokrotnie nie przechodzą uwierzytelniania
    4. Ogranicz dostęp SSH według adresu IP — Używaj reguł zapory sieciowej lub dyrektyw AllowUsers, aby ograniczyć możliwość połączenia
    5. Aktualizuj SSH — Regularnie aktualizuj OpenSSH, aby łatać znane luki w zabezpieczeniach
    6. Używaj silnych algorytmów kluczy — Preferuj ed25519 lub rsa-4096 zamiast starszych, słabszych algorytmów
    7. Zabezpiecz swoje aplikacje webowe — Połącz bezpieczeństwo SSH z Certyfikatem SSL, aby szyfrować cały ruch do Twoich usług webowych

    Często zadawane pytania

    Jaka jest różnica między SCP a SFTP?

    SCP to nieinteraktywne narzędzie wiersza poleceń zaprojektowane do szybkich, jednokomendowych transferów plików. SFTP to interaktywny protokół umożliwiający przeglądanie, zarządzanie, przesyłanie i pobieranie plików w interfejsie opartym na sesjach. Oba używają SSH do szyfrowania.

    Czy mogę używać rsync bez SSH?

    Tak — rsync ma własny tryb demona działający bez SSH, ale jest mniej bezpieczny. W przypadku każdego transferu przez internet zawsze używaj rsync przez SSH (rsync -e ssh).

    Jak przesyłać pliki, jeśli mój serwer używa niestandardowego portu SSH?

    Użyj flagi -P z SCP (scp -P 2222) lub opcji -e "ssh -p 2222" z rsync. W przypadku SFTP użyj sftp -P 2222.

    Czy SCP jest przestarzały?

    Deweloperzy OpenSSH zauważyli, że podstawowy protokół SCP ma ograniczenia i zalecają używanie SFTP lub rsync w nowych przepływach pracy. Jednak SCP pozostaje szeroko dostępny i funkcjonalny praktycznie na wszystkich systemach.

    Podsumowanie

    Opanowanie transferu plików opartego na SSH to niezbędna umiejętność dla każdego, kto zarządza serwerami, wdraża aplikacje lub utrzymuje zdalną infrastrukturę. Każde narzędzie ma swoje miejsce:

    • SCP to Twój wybór do szybkich, prostych, jednorazowych transferów
    • rsync jest niezastąpiony do kopii zapasowych, wdrożeń i wydajnej synchronizacji dużych zbiorów danych
    • SFTP sprawdza się w interaktywnych sesjach, gdy potrzebujesz przeglądać i zarządzać plikami na bieżąco

    Połączenie tych narzędzi z uwierzytelnianiem kluczem SSH i solidnymi praktykami bezpieczeństwa daje solidny, zautomatyzowany i bezpieczny przepływ pracy transferu plików, który skaluje się od pojedynczego konta Hostingu Współdzielonego aż po złożone architektury wieloserwerowe na Serwerach Dedykowanych.

    Jeśli szukasz niezawodnego, wysokowydajnego środowiska hostingowego, w którym możesz zastosować te umiejętności, zapoznaj się z planami VPS Hosting AlexHost — stworzonymi dla programistów i administratorów systemów, którzy wymagają pełnego dostępu root, pamięci masowej SSD i łączności sieciowej klasy enterprise.

    15%

    Zaoszczędź 15% na wszystkich usługach hostingowych

    Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

    Użyj kodu:

    Skills
    Rozpocznij