sftp

Interaktywny transfer plików przez SSH (bezpieczna alternatywa dla FTP).

sftp to interaktywny program do przesyłania plików działający po szyfrowanym kanale SSH. Traktuj go jak bezpieczniejszego kuzyna klasycznego FTP: te same polecenia (put, get, ls, cd), ale całość leci przez port 22 z pełnym szyfrowaniem i tą samą autoryzacją co ssh. Kiedy odpalasz sftp user@host, lądujesz w interaktywnym promptcie sftp>, gdzie poruszasz się jednocześnie po zdalnym i lokalnym systemie plików. Idealne, gdy chcesz wrzucić kilka plików na serwer albo pobrać logi, a nie masz ochoty konfigurować rsync ani stawiać osobnego serwera FTP.

Składnia i najważniejsze opcje

Podstawowa forma: sftp [-P port] [-i klucz] użytkownik@host

  • -P port — port zdalnego serwera SSH. Uwaga: to wielka litera, w przeciwieństwie do ssh, gdzie port podajesz przez małe -p.
  • -i klucz — plik z kluczem prywatnym do autoryzacji, np. ~/.ssh/id_ed25519.
  • -r — rekurencyjne kopiowanie katalogów (używane z put/get wewnątrz sesji).
  • -a — wznawia przerwane transfery zamiast nadpisywać częściowo pobrane pliki od zera.
  • -b plik — tryb wsadowy: czyta polecenia z pliku zamiast z klawiatury. Idealne do skryptów.
  • -o opcja — przekazuje opcję prosto do ssh w formacie z ssh_config, np. -o StrictHostKeyChecking=no.
  • -C — włącza kompresję (przydatne przy dużych plikach tekstowych na wolnym łączu).

Przykłady użycia

  • sftp [email protected] — łączy się i otwiera interaktywną sesję na domyślnym porcie 22.
  • sftp -P 2222 [email protected] — połączenie z serwerem nasłuchującym na niestandardowym porcie 2222.
  • sftp -i ~/.ssh/deploy_key [email protected] — logowanie kluczem prywatnym zamiast hasłem.
  • get -r /var/www/logs ./kopia — wpisane wewnątrz sesji: pobiera rekurencyjnie cały katalog logów na dysk lokalny.
  • sftp -b polecenia.txt user@host — tryb wsadowy: wykonuje listę komend z pliku bez pytania o nic, świetne do crona.

Częste błędy i pułapki

Najczęstsza wpadka to mylenie -P z -p. W sftp port to wielkie -P, a małe -p w ogóle nie oznacza portu (służy do zachowania uprawnień i czasów plików przy transferze). W ssh jest odwrotnie, więc łatwo się pomylić.

Pamiętaj też, że w sesji masz dwa zestawy poleceń: zwykłe (cd, ls, pwd) działają po stronie zdalnej, a te z prefiksem l (lcd, lls, lpwd) po lokalnej. Wrzucisz plik nie tam, gdzie myślisz, jeśli o tym zapomnisz.

W trybie wsadowym -b błąd dowolnego polecenia domyślnie przerywa cały skrypt. Jeśli chcesz zignorować błędy, poprzedź polecenie znakiem -, np. -rm stary.log. I nie licz na to, że -b wpisze hasło za Ciebie — do automatyzacji potrzebujesz autoryzacji kluczem.

Powiązane komendy: ssh, scp, rsync, ftp, ssh-keygen.