Parece que você está tentando usar o FTP ativo, mas um firewall entre o servidor e (ou o) seu cliente está bloqueando o canal de dados. Uma transação FTP consiste em dois canais ou conexões: o canal de comando (na porta 21) e o canal de dados (geralmente associado à porta 20). O cliente emite comandos no canal de comando, enquanto a carga útil (conteúdo do arquivo e saída de comandos como ls
) vai para o canal de dados. Se você tiver um firewall ou roteador interferindo no canal de dados, poderá fazer o login e tudo parecerá funcionar até que você tente obter ou enviar informações para / do servidor - ponto em que tudo parecerá apenas travar. O servidor está tentando se conectar ao cliente, mas não é capaz de fazê-lo.
No modo ativo (o padrão, a menos que você envie o comando PASV
[e observe que o vsftpd está sugerindo que você Consider using PASV
]), o servidor tenta abrir uma conexão com o cliente para o canal de dados. É isso mesmo - o servidor está se conectando de volta ao cliente e em uma porta maior que 1023. Os firewalls tendem a se opor a isso, e se você estiver por trás do NAT, simplesmente não funcionará.
É aqui que entra o FTP passivo. Com FTP passivo, o servidor usa o canal connamd estabelecido para informar ao cliente que porta e endereço IP usar para o canal de dados e, em seguida, o cliente abre uma segunda conexão ao servidor. o canal de dados. Isso resolve o problema do cliente estar por trás de um firewall. Tudo o que você precisa fazer é emitir o comando PASV
do cliente antes do PUT
. Se isso não funcionar, talvez seja necessário ajudar o vsftpd um pouco. Os itens de configuração que você pode desejar incluem pasv_min_port
e pasv_max_port
, que permitem controlar um intervalo de portas ao qual o vsftpd informa ao cliente para se conectar, para que você possa abri-los em seu firewall. Além disso, se o servidor não estiver escutando no mesmo endereço IP ao qual o cliente está se conectando (dentro de um NAT, talvez), pasv_address
informará ao vsftp onde o cliente realmente deseja se conectar (não usará automaticamente o endereço o canal de comando está aberto em).