Um cliente FTP pode aceitar um comando put muito antes de o servidor ter recebido o ficheiro, e é na diferença entre esses dois acontecimentos que vive a maioria dos mistérios de envio. Quatro etapas têm de se completar: o ficheiro local é lido, o servidor aceita o pedido de armazenamento, a ligação de dados transporta os bytes, e a transferência chega a uma resposta positiva final. Comparar as etapas é mais útil do que comparar clientes, porque um início de sessão que funciona e um nome de ficheiro que aparece ficam ambos aquém da meta.

Resposta preliminar versus resposta final

Para STOR, uma resposta 125 ou 150 é preliminar. Diz que o servidor está disposto a tentar e que uma ligação de dados está a abrir, não que o objeto existe na sua forma final. A operação só está concluída quando a transferência chega a uma resposta positiva de conclusão, habitualmente 226 ou 250, no contexto dessa operação.

426 significa que a transferência foi abortada, e um número impresso por outro comando não é o resultado deste envio. Leia a resposta que pertence ao STOR, não o último número no ecrã. Se o cliente terminar antes de essa resposta chegar, não tem qualquer prova de conclusão.

Ligação de controlo versus ligação de dados

A autenticação e a listagem de diretórios usam a ligação de controlo. Os bytes usam uma ligação de dados separada, e o respetivo ponto final é negociado a cada transferência. Um início de sessão bem-sucedido prova o caminho de controlo e não diz nada sobre se o endereço de dados é alcançável a partir do cliente.

Quando o servidor não consegue abrir a ligação de dados, investigue o ponto final negociado e o caminho permitido. O modo passivo continua a exigir um endereço de dados e uma porta utilizáveis, e uma firewall ou um dispositivo NAT entre cliente e servidor pode permitir a sessão de controlo e bloquear o intervalo de dados. Quando o servidor rejeita o pedido de armazenamento, veja o nome de caminho remoto, as permissões ou os limites de armazenamento. Nenhum dos ramos é explicado pelo facto de a ligação de controlo ter autenticado.

FTP sobre TLS versus SFTP

FTP sobre TLS continua a ser FTP: duas ligações, respostas FTP e uma atualização TLS em cada uma. SFTP é um subsistema SSH com uma única ligação e um conjunto de comandos completamente diferente. Partilham um propósito e quase nada mais, por isso um diagnóstico que atravessa os dois começa normalmente por comparar os registos errados.

Não desative o TLS para que um auxiliar intermédio inspecione a sessão, e não trate uma falha de SFTP como um problema de resposta FTP. o manual do curl documenta o TLS explícito, o modo passivo e as opções de envio se precisar de um teste com script, e é a referência para o que cada opção realmente altera.

Escolha o protocolo que o serviço realmente oferece antes de o depurar. Um servidor que só fala SFTP nunca produzirá uma resposta 226, independentemente da configuração do cliente.

Um nome de ficheiro visível versus um objeto guardado

Um nome de ficheiro visível pode representar um objeto incompleto, sobretudo após uma transferência abortada ou um cliente que terminou cedo. Peça ao responsável pelo serviço para comparar o tamanho do ficheiro de teste pretendido e um hash de conteúdo fidedigno com o objeto guardado quando se espera preservação de bytes.

Os modos binário e ASCII são outra comparação que altera o resultado. O modo ASCII pode traduzir fins de linha, por isso os bytes guardados diferem do ficheiro local mesmo que a transferência tenha tido sucesso. Mantenha o modo binário para uma verificação byte a byte, e não acrescente opções de conversão para fazer um envio falhado parecer diferente.

Um STOR comum pode substituir um ficheiro existente, e a permissão para iniciar sessão ou listar um diretório não estabelece permissão para criar ou substituir um objeto nele. Use um nome remoto nunca antes usado para o teste.

O que comparar antes de tentar de novo

Não acrescente, retome ou repita um envio às cegas sobre um ficheiro parcial incerto. Combine com o responsável se deve recomeçar com um nome novo, usar o procedimento de recuperação suportado pelo serviço, ou remover o objeto de teste falhado.

Escreva o resultado como uma de quatro afirmações: a leitura local falhou, o armazenamento foi recusado, a transferência de dados foi abortada, ou a transferência ficou concluída e os bytes guardados coincidiram. Esse registo é um resultado mais sólido do que alterar a shell, a VPN e as definições de FTP em conjunto até aparecer um nome de ficheiro, e diz à pessoa seguinte que etapa inspecionar. Guarde o texto da resposta saneado junto dessa afirmação. Então uma nova tentativa é uma decisão, não um reflexo.

Artigos relacionados