Kiedyś myślałem, że SCP to narzędzie do kopiowania plików przez SSH, a kopiowanie plików przez SSH nazywa się SFTP, który sam jest synonimem FISH.
Ale teraz, gdy szukałem wtyczki Total Commander do tego celu w systemie Windows, zauważyłem, że na jej stronie jest napisane: „Umożliwia dostęp do zdalnych serwerów przez bezpieczny FTP (FTP przez SSH). Wymaga SSH2. To NIE jest to samo jako SCP! ”.
Jeśli to nie to samo, co ja rozumiem?
ssh
scp
sftp
fish-protocol
Ivan
źródło
źródło
Odpowiedzi:
SFTP nie jest protokołem FTP nad ssh, ale rozszerzeniem protokołu SSH zawartym w SSH2 (i niektórych implementacjach SSH1). SFTP jest protokołem przesyłania plików podobnym do FTP, ale używa protokołu SSH jako protokołu sieciowego (i korzysta z opuszczenia SSH do obsługi uwierzytelniania i szyfrowania).
SCP służy tylko do przesyłania plików i nie może wykonywać innych czynności, takich jak wyświetlanie list zdalnych katalogów lub usuwanie plików, co robi SFTP.
FISH wydaje się być kolejnym protokołem, który może wykorzystywać SSH lub RSH do przesyłania plików.
źródło
Protokół SSH tworzy bezpieczny tunel, przez który można przesyłać strumień dwukierunkowy i można go używać do łączenia dowolnych dwóch procesów.
Najbardziej znanymi dwoma procesami byłyby powłoka (na serwerze) i interaktywny emulator terminala (na kliencie). To jest to, czego używasz, gdy ssh do serwera i wpisujesz polecenia po zachęcie powłoki zdalnej.
SCP to transfer plików wykonywany przy użyciu tylko tej powłoki i polecenia zdalnego. W SCP, gdy klient jest podłączony do serwera, a wszystkie uwierzytelnianie i autoryzacja zostały wykonane, klient wysyła do powłoki zdalnej polecenie podobne do
scp -f myfile.txt
, które zapisuje zawartość pliku myfile.txt do strumienia (dla klienta do odczytu) lubscp -t myfile.txt
który czyta ze strumienia i zapisuje na myfile.txt.Zauważysz, że -f i -t (dla „od” i „do”) nie znajdują się na stronach podręcznika scp. Są uważane za wewnętrzne. Istnieje lekki schemat potwierdzania oraz schemat przesyłania katalogów przez zawijanie zawartości pliku w proste nagłówki. Ale w większości przypadków SCP jest podstawową kwestią zapisania bajtów pliku w tunelu SSH, pozwalając SSH radzić sobie ze skomplikowanymi sprawami, takimi jak kompresja i integralność.
SFTP jest znacznie bardziej złożonym protokołem przesyłania plików, który ponownie jest tunelowany przez SSH.
W SFTP zarówno żądania, jak i odpowiedzi są kodowanymi binarnie pakietami o nazwach takich jak „SSH_FXP_OPEN”, „SSH_FXP_STAT”, „SSH_FXP_READ”, „SSH_FXP_DATA”, „SSH_FXP_CLOSE”.
Jedną interesującą cechą protokołu jest to, że polecenia mogą być przetwarzane potokowo, a odpowiedzi mogą występować w dowolnej kolejności. Może to oznaczać, że sesje poświęcają mniej czasu na odpowiedzi i istnieją możliwości optymalizacji jednoczesnych transferów z jednego serwera ze źródłami danych o różnych prędkościach - chociaż nie wiem, do jakiego stopnia wykorzystano te możliwości.
SFTP ma polecenia do wykonywania wielu rzeczy, których SCP nie rozwiązuje; takich jak usuwanie, zmiana nazwy, obcinanie, przenoszenie itp.
Wszystkie szczegóły są dostępne w wersji roboczej IETF .
Warto zauważyć, że nowsze pakiety SSH zastępują
scp
plik binarny użytkownika dowiązaniem symbolicznym do pliku binarnego SFTP. Ten SFTP ma wygląd scp, ale pod przykryciem używa protokołu SFTP.Ryba to interesujący kawałek historii. Powiedzmy, że chcesz przesyłać pliki przez SSH, ale twój zdalny system nie ma SCP. A może chcesz wykonywać bardziej skomplikowane operacje na plikach niż SCP, ale twój zdalny system nie ma SFTP. Żaden z tych scenariuszy nie jest dziś prawdopodobny, ale kiedy wynaleziono Fish, tak było.
Dlatego twórcy klienta Midnight Commander postanowili stworzyć własne rozwiązanie. Zasadniczo jest podobny do scp, ale jest więcej poleceń. Klient wysyła polecenia wyglądające następująco:
Jeśli rozmawiasz z serwerem Fish, to zinterpretuje to
#RETR
polecenie. Jeśli jednak na serwerze zdalnym nie ma zainstalowanego serwera Fish, polecenia zostaną zinterpretowane przez powłokę. Najpierw komentarz, a następnie polecenie, które drukuje informacje o pliku, a następnie zawartość pliku otoczona niektórymi znacznikami.W efekcie, przy braku scp lub ryby, klient „wyrzucił swój własny” odpowiednik scp - ale może również wysyłać polecenia powłoki w celu zmiany nazwy, przesunięcia, obcięcia itp.
Szczegóły dotyczące ryb znajdują się w źródle Midnight Commander tutaj .
Co to wszystko oznacza z perspektywy użytkownika końcowego?
źródło
Mówiąc prosto:
źródło
sftp
iscp
wymaga specjalnych programów po stronie serwera, w przeciwieństwie do FISH, który używa tylko podstawowych uniksowych funkcji w zdalnej powłoce.scp
scp lub sftp-server). I rzeczywiście zdarzają się przypadki, gdy zdalna strona jest „ograniczonym” Uniksem, w którym nie można zainstalować tego, co chcesz: do przesyłania plików do Androida przez SSH (przez Wi-Fi) napisałem zestaw skryptów rpush-cat - być może klient FISH działałby. (tramp-fish.el
w Emacsie też może: zwykły klient TRAMP nie działał, ponieważstat
nie istniał na Androidzie).scp
jest on potrzebny po stronie serwera, oprócz strony klienta? Dzięki szybkiemu wyszukiwaniu w Google nie mogłem znaleźć niczego, co potwierdza, żescp
jest to również potrzebne po stronie serwera.FISH i SFTP są podobne i jak zaobserwowano, oba działają na SSH, SFTP wymaga szczególnego wsparcia i konfiguracji na serwerze SSH w celu ułatwienia transferu, ale jest to nieco bardziej bezpieczne i pozwala SysAdmins na tylko SFTP (w takich sytuacjach FISH wygrał to działa).
FISH wymaga powłoki (na przykład sh / rsh) do skopiowania, a zatem wymaga pełnego dostępu SSH do maszyny, wyobrażam sobie, że trudniej byłoby go zabezpieczyć (nie mogę komentować tego obiektywnie, jak nigdy nie musiałem).
Tam, gdzie to możliwe, polecam SFTP, scp, FISH (w tej kolejności).
Artykuł w Wikipedii FISH
źródło
scp
scp lub sftp-server). I rzeczywiście zdarzają się przypadki, gdy zdalna strona jest „ograniczonym” Uniksem, w którym nie można zainstalować tego, co chcesz: do przesyłania plików do Androida przez SSH (przez Wi-Fi) napisałem zestaw skryptów rpush-cat - być może klient FISH działałby. (tramp-fish.el
w Emacsie też może: zwykły klient TRAMP nie działał, ponieważstat
nie istniał na Androidzie).