SFTP, SCP ve FISH protokolleri arasındaki fark nedir?


59

SCP'nin dosyaları SSH üzerinden kopyalamanın bir aracı olduğunu düşünürdüm ve SSH üzerinden dosyaları kopyalamanın kendisi de FISH ile eşanlamlı olan SFTP olarak adlandırılıyor.

Ancak, Windows'ta bunu yapmak için bir Total Commander eklentisi aradığım için, sayfasında "Güvenli sunucu üzerinden uzak sunuculara erişime izin veriyor (SSH üzerinden FTP) izin veriyor." SSH2 gerektirir. Bu aynı değil. SCP olarak! "

Aynı değilse, ne yanlış anlıyorum?


5
Bu önceki bir sorunun bir uzantısı . (@Ivan: Bundan bahsetmek faydalı olurdu.)
Gilles '0

Yanıtlar:


57

SFTP , ssh üzerindeki FTP protokolü değil, SSH2'ye dahil olan SSH protokolünün bir uzantısıdır (ve bazı SSH1 uygulamaları). SFTP, FTP'ye benzer bir dosya aktarım protokolüdür, ancak SSH protokolünü ağ protokolü olarak kullanır (ve kimlik doğrulama ve şifrelemeyi işlemek için SSH'den ayrılmanın yararıdır).

SCP yalnızca dosyaları aktarmak içindir ve SFTP'nin yaptığı gibi uzak dizinleri listelemek veya dosyaları kaldırmak gibi işlemleri yapamaz.

FISH , dosyaları aktarmak için SSH veya RSH kullanabilen başka bir protokol gibi görünüyor .


11
Katma değer: TLS üzerinden FTP olan FTPS de var.
mikemaccana

3
Daha sonra FTPES ekleyebileceğiniz @mikemaccana cadı düzenli bir ftp bağlantısı üzerinde açıkça ftps kullanma imkanı
Kiwy

26

SSH protokolü, iki yönlü bir akışı aktarabileceğiniz güvenli bir tünel oluşturur ve bu akışı, istediğiniz iki işlemi bağlamak için kullanabilirsiniz.

En bilinen iki işlem bir kabuk (sunucuda) ve etkileşimli bir terminal emülatörü (istemcide) olacaktır. Bir sunucuya ssh yaparken ve uzak kabuğun komut istemine komutları yazarken kullandığınız şey budur.

SCP , yalnızca bu kabuk ve uzak komut kullanılarak yapılan dosya aktarımıdır. SCP'de, istemci sunucuya bağlandıktan ve tüm kimlik doğrulama ve yetkilendirme yapıldıktan sonra, istemci uzak kabuğa scp -f myfile.txt, myfile.txt dosyasının içeriğini akışa yazan sadece bir komut gönderir (istemci için okumak için) veya scp -t myfile.txtakıştan okuyan ve dosya.txt dosyasına yazar.

-F ve -t öğelerinin ("dan" ve "dan" e) scp man sayfalarında olmadığını göreceksiniz. İç olarak kabul edilirler. Hafif bir onay şeması ve dosya içeriğini basit başlıklara sararak dizin aktarımı için bir şema vardır. Fakat çoğu zaman SCP, dosyanın baytlarını SSH tüneli üzerine yazarak SSH'nin sıkıştırma ve bütünlük gibi karmaşık şeylerle ilgilenmesine izin vermenin temel bir meselesidir.

SFTP , yine SSH aracılığıyla tünellenmiş olan çok daha karmaşık bir dosya aktarım protokolüdür.

SFTP'de hem istekler hem de yanıtlar, "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE" gibi isimlere sahip ikili kodlu paketlerdir.

Protokolün ilginç bir özelliği, komutların yöneltilebilmesi ve yanıtların herhangi bir sırayla gelebilmesidir. Bu, oturumların yanıtları beklerken daha az zaman harcadığı anlamına gelebilir ve bu fırsatların ne ölçüde kullanıldığını bilmeme rağmen, bir sunucudan eşzamanlı aktarımları çeşitli hızlarda veri kaynakları ile optimize etmek için fırsatlar vardır.

SFTP'nin, SCP'nin ele almadığı birçok şeyi yapma komutları vardır; sil, yeniden adlandır, kes, taşı vb.

Tüm detaylar bir IETF Taslağında mevcuttur .

Daha yeni SSH paketlerinin, kullanıcı scpikili kodunu SFTP ikili koduna bir bağlantı ile değiştirmesi dikkat çekicidir . Bu SFTP, scp'nin görünümüne ve havasına sahiptir, ancak kapakların altında SFTP protokolünü kullanıyor.

Alıntılama - O'Reilly SSH: Güvenli Kabuk, Tanımlayıcı Rehber , bölüm 5.7 "Alt Sistemler":

UYARI: Alt sistem-sftp hattını sshd2_config'den kaldırmayın: scp2 ve sftp'nin çalışması gerekir. Dahili olarak, her iki program da dosya aktarımlarını gerçekleştirmek için ssh2-sftp komutunu çalıştırır.

Balık ilginç bir tarih eseridir. Diyelim ki SSH üzerinden dosya aktarmak istiyorsunuz, ancak uzak sisteminizde SCP yok. Belki de SCP'den daha karmaşık dosya işlemleri yapmak istiyorsunuz, ancak uzak sisteminizde SFTP yok. Bugün bu senaryolardan hiçbiri muhtemel değildir, ancak Balık icat edildiğinde, onlardı.

Böylece, Midnight Commander müşterisinin geliştiricileri kendi çözümlerini oluşturmaya karar verdi. Prensip olarak scp'ye benzer, ancak daha fazla komut var. İstemci şuna benzeyen komutlar gönderir:

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

Bir Fish sunucusuyla konuşuyorsanız, #RETRkomutu yorumlar. Bununla birlikte, uzak sunucuda bir Balık sunucusu kurulu değilse, komutlar kabuk tarafından yorumlanacaktır. İlk önce bir yorum, ardından dosya hakkında bilgi yazan bir komut, ardından bazı işaretçilerle çevrili dosya içeriği.

Etkili bir şekilde, scp veya balık yokluğunda, müşteri scp eşdeğerini "kendi" yuvarlamıştır - ancak aynı şekilde yeniden adlandırmak, taşımak, kesmek, vb. İçin kabuk komutları gönderebilir.

Balıkların detayları burada Midnight Commander kaynağındadır .

Tüm bunlar son kullanıcı bakış açısından ne anlama geliyor?

  • daha eski SSH sunucu uygulamaları scp'yi destekler ancak SFTP'yi desteklemez; SFTP istemcisini bunlarla kullanamazsınız.
  • Performans, güvenilirlik ve esneklik için SFTP kullanın
  • "Scp" müşteriniz kılık değiştirmiş SFTP istemcisi olabilir ( Alıntı gerekli )
  • Balık niş durumlarda yararlı olabilir, ancak aksi takdirde daha standart SFTP kullanın.

20

Basitleştirin:

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) 

1
Ama sftpve scpuzak kabuk içinde sadece temel Unix utuilities kullanan FISH, aksine sunucu tarafında özel programlar gerektirir.
imz - Ivan Zakharyaschev

FISH'in açıklamasına göre, FISH'in dikkat çekici bir özelliği, uzak tarafta özel bir şey gerektirmemesidir ( scpscp veya sftp-server için olduğu gibi hiçbir sunucu programı yok ). Ve uzak tarafın "kısıtlanmış" bir Unix olduğunda, istediğinizi kuramayacağınız durumlar var: dosyalarınızı Android'e SSH (WiFi üzerinden) üzerinden aktarmak için, rpush-cat betiklerini yazdım. - belki de bir FISH müşterisi işe yarar. ( tramp-fish.elEmacs'ta da olabilir: normal TRAMP istemcisi işe yaramadı çünkü statAndroid'de yoktu.)
imz - Ivan Zakharyaschev

2
scpİstemci tarafına ek olarak, sunucu tarafında da nasıl ihtiyaç duyulduğunu açıklayabilir misiniz ? Hızlı bir google aramasında, scpsunucu tarafında da gerekli olduğunu doğrulayan hiçbir şey bulamadım .
Johannes Bittner

11

FISH ve SFTP benzerdir ve gözlemlendiği gibi her ikisi de SSH üzerinde çalışır, SFTP, SSH Sunucusunda aktarımı kolaylaştırmak için özel destek ve yapılandırma gerektirir, ancak biraz daha güvenlidir ve SysAdmins’in yalnızca SFTP’ye izin vermesine izin verir (bu durumlarda FISH kazandı) çalışmıyor.

FISH, kopyalamak için bir kabuk (örneğin sh / rsh) gerektirir ve bu nedenle makineye tam SSH erişimi gerektirir, güvenceye almanın daha zor olacağını düşünürdüm (bu konuda hiçbir zaman zorunda olmadığım şekilde nesnel olarak yorum yapamam).

Mümkün olduğunda SFTP, scp, FISH (bu sıraya göre) tavsiye ederim.

Wikipedia FISH Makalesi


Bağlantılı açıklamaya göre, FISH'in dikkat çekici bir özelliği, uzak tarafta özel bir şey gerektirmemesidir ( scpscp veya sftp-server için olduğu gibi hiçbir sunucu programı yok ). Ve uzak tarafın "kısıtlanmış" bir Unix olduğunda, istediğinizi kuramayacağınız durumlar var: dosyalarınızı Android'e SSH (WiFi üzerinden) üzerinden aktarmak için, rpush-cat betiklerini yazdım. - belki de bir FISH müşterisi işe yarar. ( tramp-fish.elEmacs'ta da olabilir: normal TRAMP istemcisi işe yaramadı çünkü statAndroid'de yoktu.)
imz - Ivan Zakharyaschev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.