O protocolo SSH cria um túnel seguro através do qual você pode transferir um fluxo bidirecional e pode usá-lo 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 que você está usando quando ssh para um servidor e digita comandos no prompt do shell remoto.
O 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 foram feitas, o cliente envia ao shell remoto um comando como o scp -f myfile.txt
qual apenas grava o conteúdo do arquivo myfile.txt no fluxo (para o cliente para ler) ou scp -t myfile.txt
que lê do fluxo e grava em myfile.txt.
Você notará que -f e -t (para "de" e "para") não estão nas páginas de manual do scp. Eles são considerados internos. Há um esquema de reconhecimento leve e um esquema para transferir diretórios envolvendo o conteúdo do arquivo em cabeçalhos simples. Mas, na maioria das vezes, o SCP é uma questão básica de escrever os bytes do arquivo no túnel SSH, permitindo que o SSH lide com coisas complicadas, como compactação e integridade.
O SFTP é um protocolo de transferência de arquivos muito mais complexo, que é novamente sintonizado através do SSH.
No SFTP, solicitações e respostas são pacotes codificados em binário 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 canalizados e as respostas podem ocorrer em qualquer ordem. Isso pode significar que as sessões gastam menos tempo aguardando 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 possui comandos para fazer muitas coisas que o SCP não aborda; como excluir, renomear, truncar, mover etc.
Todos os detalhes estão disponíveis em um rascunho da IETF .
Vale ressaltar que os pacotes SSH mais recentes substituem o scp
binário do usuário por um link simbólico para o binário do SFTP. Esse SFTP tem a aparência do scp, mas, oculto, ele usa o protocolo SFTP.
Citação - O'Reilly SSH: O Shell Seguro, O Guia Definitivo , seção 5.7 "Subsistemas":
AVISO: Não remova a linha subsystem-sftp do sshd2_config: é necessário que o scp2 e o sftp funcionem. Internamente, os dois programas executam ssh2 -s sftp para executar transferências de arquivos.
O peixe é uma peça interessante da história. Digamos que você deseja transferir arquivos pelo SSH, mas seu sistema remoto não possui SCP. Ou talvez você queira executar operações de arquivo mais sofisticadas que o SCP, mas seu sistema remoto não possui SFTP. Atualmente, nenhum desses cenários é provável, mas quando o Fish foi inventado, eles eram.
Assim, os desenvolvedores do cliente Midnight Commander começaram a criar sua própria solução. É semelhante ao scp em princípio, mas há 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 conversando com um servidor Fish, ele interpretará o #RETR
comando. 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 entre alguns marcadores.
Efetivamente, na ausência de scp ou fish, o cliente "rolou seu próprio" equivalente scp - mas também pode enviar comandos do shell para renomear, mover, truncar etc.
Detalhes dos peixes estão na fonte Midnight Commander aqui .
O que tudo isso significa da perspectiva do usuário final?
- implementações de servidor SSH mais antigas 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 ( citação necessária )
- Os peixes podem ser úteis em circunstâncias de nicho, mas de outra forma usam o SFTP mais padrão.