Qual é a diferença entre os protocolos SFTP, SCP e FISH?

49

Eu costumava pensar que o SCP é uma ferramenta para copiar arquivos por SSH, e copiar arquivos por SSH é chamado de SFTP, que é um sinônimo para o FISH.

Mas agora que eu estava procurando por um plugin Total Commander para fazer isso no Windows, eu notei que em sua página ele diz: "Permite acesso a servidores remotos via FTP seguro (FTP via SSH). Requer SSH2. Isso é NÃO é o mesmo que SCP! ".

Se não é o mesmo, então o que eu estou entendendo mal?

    
por Ivan 07.03.2011 / 00:13

4 respostas

46

SFTP não é o protocolo FTP sobre ssh, mas uma extensão para o protocolo SSH incluído no SSH2 (e alguns Implementações SSH1). O SFTP é um protocolo de transferência de arquivos semelhante ao FTP, mas usa o protocolo SSH como o protocolo de rede (e se beneficia de deixar o SSH para lidar com a autenticação e a criptografia).

O SCP é apenas para transferir arquivos e não pode fazer outras coisas, como listar diretórios remotos ou remover arquivos, o que o SFTP faz.

O FISH parece ser outro protocolo que pode use SSH ou RSH para transferir arquivos.

    
por 07.03.2011 / 00:41
20

O protocolo SSH cria um túnel seguro através do qual você pode transferir um fluxo bidirecional, e você pode usar esse fluxo para conectar quaisquer dois processos que desejar.

Os dois processos mais familiares seriam um shell (no servidor) e um emulador de terminal interativo (no cliente). Isso é o que você está usando quando você usa o ssh para um servidor e digita comandos no prompt do shell remoto.

SCP é a transferência de arquivos feita usando apenas esse shell e um comando remoto. No SCP, uma vez que o cliente está conectado ao servidor, e toda a autenticação e autorização foi feita, o cliente envia ao shell remoto um comando como scp -f myfile.txt , que apenas grava o conteúdo do arquivo myfile.txt no fluxo ( para o cliente ler) ou scp -t myfile.txt que lê o fluxo e grava em meuarquivo.txt.

Você notará que -f e -t (de "de" e "para") não estão nas páginas de manual do scp. Eles são considerados internos. Existe um esquema de reconhecimento leve e um esquema para transferir diretórios agrupando o conteúdo do arquivo em cabeçalhos simples. Mas, para a maior parte, o SCP é uma questão básica de gravar os bytes do arquivo no túnel SSH, permitindo que o SSH lide com coisas complicadas, como compactação e integridade.

SFTP é um protocolo de transferência de arquivos muito mais complexo, que é novamente sintonizado através do SSH.

No SFTP, as solicitações e respostas são pacotes codificados binários com nomes como "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE".

Uma característica interessante do protocolo é que os comandos podem ser pipelinados e as respostas podem chegar em qualquer ordem. Isso pode significar que as sessões gastam menos tempo esperando respostas, e há oportunidades para otimizar transferências simultâneas de um servidor com fontes de dados de várias velocidades - embora eu não saiba até que ponto essas oportunidades foram aproveitadas.

O SFTP tem comandos para fazer muitas coisas que o SCP não resolve; como excluir, renomear, truncar, mover, etc.

Todos os detalhes estão disponíveis em um esboço da IETF .

Vale a pena notar que os pacotes SSH mais recentes substituem o usuário scp binary por um symlink para o binário SFTP. Este SFTP tem a aparência de scp, mas sob as capas está usando o protocolo SFTP.

Citation -- O'Reilly SSH: The Secure Shell, The Definitive Guide, section 5.7 "Subsystems":

WARNING: Don't remove the subsystem-sftp line from sshd2_config: it is required for scp2 and sftp to work. Internally, both programs run ssh2 -s sftp to perform file transfers.

Fish é uma parte interessante da história. Digamos que você queira transferir arquivos via SSH, mas seu sistema remoto não possui SCP. Ou talvez você queira fazer operações de arquivo mais sofisticadas que o SCP, mas seu sistema remoto não tem SFTP. Nenhum desses cenários é provável hoje, mas quando Fish foi inventado, eles eram.

Assim, os desenvolvedores do Midnight Commander do cliente começaram a criar sua própria solução. É semelhante ao scp em princípio, mas existem mais comandos. O cliente envia comandos parecidos com:

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

Se você estiver falando com um servidor Fish, ele interpretará o comando #RETR . No entanto, se o servidor remoto não tiver um servidor Fish instalado, os comandos serão interpretados pelo shell. Primeiro um comentário, depois um comando que imprime informações sobre o arquivo, seguido pelo conteúdo do arquivo cercado em alguns marcadores.

Efetivamente, na ausência de scp ou fish, o cliente "rolou seu próprio" scp equivalente - mas pode igualmente enviar comandos shell para renomear, mover, truncar, etc.

Os detalhes de Fish estão na fonte Midnight Commander aqui .

O que isso tudo significa do ponto de vista do usuário final?

  • implementações mais antigas de servidores SSH suportam scp, mas não SFTP; você não pode usar um cliente SFTP com estes
  • Use SFTP para desempenho, confiabilidade e flexibilidade
  • Seu cliente "scp" pode ser um cliente SFTP disfarçado ( Citation needed )
  • O peixe pode ser útil em circunstâncias específicas, mas use o SFTP mais padrão.
por 24.02.2014 / 13:32
19

Simplifique:

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) 
    
por 07.03.2011 / 08:57
11

FISH e SFTP são semelhantes e, como observado, ambos funcionam sobre SSH, o SFTP requer suporte e configuração específicos no Servidor SSH para facilitar a transferência, mas é um pouco mais seguro e permite que os SysAdmins permitam somente SFTP (nestes situações FISH não vai funcionar).

FISH requer um shell (sh / rsh por exemplo) para copiar e, portanto, requer acesso SSH completo para a máquina, eu imagino que seria mais difícil de proteger (não posso comentar objetivamente sobre isso como eu nunca tive que ).

Sempre que possível, eu recomendaria SFTP, scp, FISH (nessa ordem).

Artigo FISH da Wikipédia

    
por 12.11.2010 / 03:32