FTP reply code 500 means the server received a command it does not recognize. The command verb may be misspelled, the line may contain illegal characters, or the command may not be implemented by this server. This is a permanent error for the specific command — the client should not retry the same command but can continue the FTP session with correct commands. Some servers return 500 for legitimate commands that they have chosen to disable (such as SITE commands or legacy commands like ACCT). Check the server's FEAT response and HELP output to see which commands are supported.
The client sent a command with a typo or a command that the server does not implement. FTP commands are case-insensitive but must be recognized by the server. Common errors include custom commands that only work on specific server software.
A non-FTP client (HTTP client, SSH client) connected to port 21 and sent data the FTP server cannot parse. The server sees the first line and returns 500 because it is not a valid FTP command.
The client attempted to send encrypted data before completing AUTH TLS, or sent plaintext after TLS was established. The server receives garbage bytes and returns 500.
Check that the command is spelled correctly. Standard FTP commands include USER, PASS, LIST, RETR, STOR, CWD, PWD, DELE, MKD, RMD, QUIT, PASV, EPSV, TYPE, FEAT, SYST, and NOOP.
Send HELP to see which commands the server supports, and FEAT to see available extensions. Only use commands listed in these responses.
curl -v ftp://ftp.example.com/ -Q 'HELP'
Connect manually and type commands to isolate which command triggers 500. Start with basic commands (USER, PASS, PWD, LIST) before trying advanced ones.
ftp ftp.example.com
The FTP command was recognized but the parameters or arguments are invalid.
The FTP server recognized the command but has not implemented it or has disabled it.
The FTP commands were sent in the wrong order. The server requires a specific command sequence.