it-swarm-tr.com

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

SCP'nin dosyaları SSH üzerinden kopyalamak için bir araç olduğunu düşünürdüm ve SSH üzerinden dosya kopyalamaya, kendisi FISH ile eşanlamlı olan SFTP denir.

Ama şimdi Windows'ta bunu yapmak için bir Total Commander eklentisi ararken, "Güvenli FTP (SSH üzerinden FTP) üzerinden uzak sunuculara erişime izin veriyor." SSH2 gerektiriyor. SCP olarak! ".

Eğer aynı değilse o zaman ne yanlış anlıyorum?

67
Ivan

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

SCP yalnızca dosyaları aktarmak içindir ve uzak dizinleri listeleme veya SFTP'nin yaptığı dosyaları kaldırma gibi başka şeyler yapamaz.

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

63
jsbillings

SSH protokolü, çift 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 çok bilinen iki işlem bir Shell (sunucuda) ve etkileşimli bir terminal emülatörü (istemcide) olacaktır. Bir sunucuya ssh kullandığınızda ve uzak Shell's Prompt'ta komutlar yazarken kullandığınız şey budur.

[~ # ~] scp [~ # ~] yalnızca o Kabuk ve uzak komut kullanılarak 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 Gibi bir komut gönderir. akıştan (istemcinin okuması için) veya akıştan okuyan ve dosyam.txt dosyasına yazan scp -t myfile.txt.

-F ve -t öğelerinin ("from" ve "to" için) scp yönetim sayfalarında olmadığını fark edeceksiniz. Dahili olarak kabul edilirler. Hafif bir onay şeması ve dosya içeriğini basit üstbilgilere sararak dizinleri aktarmak için bir şema vardır. Ancak çoğunlukla SCP, dosyanın baytlarını SSH tüneline yazmak ve SSH'nin sıkıştırma ve bütünlük gibi karmaşık şeylerle uğraşmasına izin vermek temel bir konudur.

[~ # ~] sftp [~ # ~] , yine SSH üzerinden tünellenen çok daha karmaşık bir dosya aktarım protokolüdür.

SFTP'de hem istek hem de yanıtlar, "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE" gibi ikili kodlanmış paketlerdir.

Protokolün ilginç bir özelliği, komutların ardışık düzenlenmesi ve yanıtların herhangi bir sırada gelebilmesidir. Bu, oturumların yanıtları beklemek için daha az zaman harcadığı anlamına gelebilir ve bu fırsatların ne ölçüde alındığını bilmememe rağmen, bir sunucudan eşzamanlı aktarımları çeşitli hızlarda veri kaynaklarıyla optimize etme fırsatları vardır.

SFTP'nin SCP'nin ele almadığı birçok şeyi yapma komutları vardır; silme, yeniden adlandırma, kısaltma, taşıma vb.

Tüm detaylar bir IETF Taslak .

Daha yeni SSH paketlerinin scp binary kullanıcısını SFTP ikilisine bir sembolik işaretle değiştirdiğini belirtmek gerekir. Bu SFTP scp görünümü ve hissine sahiptir, ancak kapakların altında SFTP protokolünü kullanmaktadır.

Alıntı - O'Reilly SSH: Güvenli Kabuk, Kesin Kılavuz, bölüm 5.7 "Alt Sistemler":

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

Balık ilginç bir tarih parçasıdır. Diyelim ki SSH üzerinden dosya aktarmak istiyorsunuz, ancak uzak sisteminizde SCP yok. Belki de SCP'den daha karmaşık dosya işlemleri yapmak istersiniz, ancak uzak sisteminizde SFTP yoktur. Bu senaryoların hiçbiri bugün muhtemel değildir, ancak Balık icat edildiğinde öyleydi.

Yani müşterinin geliştiricileri Midnight Commander kendi çözümlerini yaratmaya başladılar. Prensipte scp'ye benzer, ancak daha fazla komut var. İstemci aşağıdaki gibi 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, #RETR Komutunu yorumlayacaktır. Ancak, uzak sunucuda bir Balık sunucusu yüklü değilse, komutlar Kabuk tarafından yorumlanır. Önce bir yorum, daha sonra dosya hakkında bilgi basan bir komut, ardından bazı işaretçilerle çevrelenmiş dosya içeriği.

Etkili bir şekilde, scp veya balık olmadığında, müşteri scp eşdeğerini "kendi yuvarladı" - ancak aynı şekilde yeniden adlandırmak, taşımak, kısaltmak vb. İçin Shell komutları gönderebilir.

Balık Detayları Gece Yarısı Komutanı kaynağındadır burada .

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

  • eski SSH sunucu uygulamaları scp'yi destekler ancak SFTP'yi desteklemez; bunlarla bir SFTP istemcisi kullanamazsınız
  • Performans, güvenilirlik ve esneklik için SFTP kullanın
  • "Scp" istemciniz gizlenmiş bir SFTP istemcisi olabilir ( Alıntı gerekli)
  • Balık niş koşullarda yararlı olabilir, ancak aksi takdirde daha standart SFTP kullanın.
34
slim

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) 
21
c2h2

FISH ve SFTP benzerdir ve her ikisi de SSH üzerinde çalıştığı gibi SFTP, aktarımı kolaylaştırmak için SSH Sunucusunda ö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 kazanılır çalışmıyor).

FISH, kopyalamak için bir Kabuk (örneğin sh/rsh) gerektirir ve bu nedenle makineye tam SSH erişimi gerektirir, güvenli hale getirmenin daha zor olacağını hayal ederdim (bunu hiç yapmadım gibi nesnel olarak yorum yapamam).

Mümkün olduğunda, SFTP, scp, FISH (bu sırayla) öneririm.

Wikipedia BALIK Makalesi

11
N J