it-swarm-eu.dev

Jaký je rozdíl mezi protokoly SFTP, SCP a FISH?

Dříve jsem si myslel, že SCP je nástroj pro kopírování souborů přes SSH a kopírování souborů přes SSH se nazývá SFTP, což je samo o sobě synonymem pro FISH.

Ale teď, když jsem hledal plugin Total Commander, aby to bylo možné ve Windows, jsem si všiml, že na jeho stránce se říká „Umožňuje přístup ke vzdáleným serverům prostřednictvím zabezpečeného FTP (FTP přes SSH). Vyžaduje SSH2. NENÍ to stejné jako SCP! “.

Pokud to není stejné, co jsem nepochopil?

67
Ivan

SFTP není protokol FTP přes ssh, ale rozšíření protokolu SSH obsažené v SSH2 (a některé implementace SSH1). SFTP je protokol pro přenos souborů podobný FTP, ale jako síťový protokol používá protokol SSH (a těží z ponechání SSH pro zpracování autentizace a šifrování).

SCP je pouze pro přenos souborů a nemůže dělat jiné věci, jako je seznam vzdálených adresářů nebo odstraňování souborů, které SFTP dělá.

Zdá se, že FISH je další protokol , který může použít SSH nebo RSH k přenosu souborů.

63
jsbillings

Protokol SSH vytváří bezpečný tunel, pomocí kterého můžete přenášet obousměrný tok, a tento proud můžete použít k propojení libovolných dvou procesů, které se vám líbí.

Nejznámější dva procesy by byly Shell (na serveru) a interaktivní emulátor terminálu (u klienta). To je to, co používáte, když ssh na server a zadejte příkazy na vzdáleném Shell's Prompt.

[~ # ~] scp [~ # ~] je přenos souborů prováděn pouze pomocí Shell a vzdáleného příkazu. V SCP, jakmile je klient připojen k serveru a byla provedena veškerá autentizace a autorizace, klient odešle vzdálenému prostředí příkaz jako scp -f myfile.txt, který pouze zapíše obsah souboru myfile.txt do proudu (pro čtení klienta) nebo scp -t myfile.txt které čte ze streamu a zapisuje do souboru myfile.txt.

Všimněte si, že -f a -t (pro "od" a "do") nejsou v scp manuálech. Jsou považovány za interní. Existuje lehké schéma potvrzení a schéma pro přenos adresářů zabalením obsahu souboru do jednoduchých záhlaví. Ale z velké části je SCP základní záležitostí zápisu bajtů souboru do tunelu SSH, což umožňuje SSH zabývat se složitými věcmi, jako je komprese a integrita.

[~ # ~] sftp [~ # ~] je mnohem složitější protokol pro přenos souborů, který je opět tunelován pomocí SSH.

V SFTP jsou požadavky i odpovědi binárně kódované pakety se jmény jako "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE".

Jednou zajímavou vlastností protokolu je to, že příkazy lze zpracovávat a odpovědi mohou přicházet v libovolném pořadí. To může znamenat, že relace tráví méně času čekáním na odpovědi a existují příležitosti k optimalizaci souběžných přenosů z jednoho serveru pomocí zdrojů dat různých rychlostí - i když nevím, do jaké míry byly tyto příležitosti využity.

SFTP má příkazy k provádění mnoha věcí, které SCP neřeší; jako smazat, přejmenovat, zkrátit, přesunout atd.

Všechny podrobnosti jsou k dispozici v IETF Draft .

Stojí za zmínku, že novější balíčky SSH nahrazují binární uživatele scp symbolickým odkazem na binární SFTP. Tento SFTP má vzhled a dojem scp, ale pod kryty používá protokol SFTP.

Citace - O'Reilly SSH: The Secure Shell, Definitivní průvodce, oddíl 5.7 "Subsystems":

VAROVÁNÍ: Neodstraňujte linku subsystému-sftp z sshd2_config: pro práci scp2 a sftp je nutné. Interně oba programy spouští ssh2 -s sftp za účelem přenosu souborů.

Ryba je zajímavá část historie. Řekněme, že chcete přenášet soubory přes SSH, ale váš vzdálený systém nemá SCP. Nebo možná budete chtít provádět sofistikovanější operace se soubory než SCP, ale váš vzdálený systém nemá SFTP. Ani jeden z těchto scénářů není pravděpodobný dnes, ale když byl vynalezen Fish, byly.

Takže vývojáři klienta Midnight Commander začali vytvářet vlastní řešení. V zásadě je to podobné scp, ale existuje více příkazů. Klient odešle příkazy, které vypadají takto:

 #RETR /some/name
 ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200'

Pokud mluvíte se serverem Fish, bude interpretovat #RETR příkaz. Pokud však vzdálený server nemá nainstalovaný server Fish, příkazy budou Shell interpretovány. Nejprve komentář, poté příkaz, který vytiskne informace o souboru, následovaný obsahem souboru obklopeným některými značkami.

Efektivně, v nepřítomnosti scp nebo ryb, klient „převalil svůj vlastní“ ekvivalent scp - ale může stejně poslat příkazy Shell pro přejmenování, přesun, zkrácení atd.

Podrobnosti o rybách jsou ve zdroji Midnight Commander zde .

Co to všechno znamená z pohledu koncového uživatele?

  • starší implementace serveru SSH podporují scp, ale nikoli SFTP; nemůžete s nimi používat klienta SFTP
  • Využijte SFTP pro výkon, spolehlivost a flexibilitu
  • Váš klient „scp“ může být maskovaný klient SFTP ( je třeba citovat)
  • Ryby mohou být užitečné za určitých podmínek, ale jinak používají standardnější SFTP.
34
slim

Jednoduše řečeno:

SFTP = SSH + SFTP-server on server
SCP  = SSH + `scp` on server side
FISH = SSH + `dd` (and some other basic Unix utilities on the server side only) 
21
c2h2

FISH a SFTP jsou podobné a jak bylo pozorováno, obě fungují přes SSH, SFTP vyžaduje specifickou podporu a konfiguraci na SSH serveru, aby se usnadnil přenos, ale je to trochu bezpečnější a umožňuje SysAdminům povolit pouze SFTP (v těchto situacích FISH vyhrál 't práce).

FISH vyžaduje kopii Shell (například sh/rsh), a proto vyžaduje úplný přístup ke stroji SSH, představoval bych si, že by bylo těžší zabezpečit (nemůžu to objektivně komentovat, jak jsem nikdy neměl).

Pokud je to možné, doporučil bych SFTP, scp, FISH (v tomto pořadí).

Wikipedia FISH Article

11
N J