FTP reply code 503 means the client issued a valid command at the wrong point in the FTP conversation. FTP is a stateful protocol — certain commands must follow others in a specific sequence. For example, PASS must follow USER, RNTO must follow RNFR, RETR requires a preceding PORT or PASV, and STOR after REST requires the correct sequence. Sending any of these commands out of order triggers 503. This also occurs if a command requires authentication and the user has not yet logged in (though many servers use 530 for that case instead).
The client sent PASS before USER. The correct sequence is USER username followed by PASS password. Some clients skip USER after reconnecting, assuming the server remembers.
The client sent RNTO (rename to) without first sending RNFR (rename from). Renaming requires both commands in sequence: RNFR oldname, then RNTO newname.
The client sent RETR, STOR, or LIST without first establishing a data connection mode via PORT or PASV/EPSV. Some servers return 503 for this, others return 425.
The client sent a file operation command (RETR, STOR, LIST, etc.) before completing the USER/PASS login sequence. The server requires authentication first.
The standard FTP flow is: connect -> USER -> PASS -> (AUTH TLS ->) PASV/EPSV -> RETR/STOR/LIST -> 226 -> QUIT. Each step must succeed before proceeding.
For rename: send RNFR first, wait for 350, then send RNTO. For resume: send REST first, wait for 350, then send RETR or STOR.
Always send PASV or EPSV before RETR, STOR, LIST, or NLST. The data connection must be established before any transfer command.
Turn on verbose logging in your FTP client to see the exact command sequence. This helps identify where the ordering breaks down.
curl -v ftp://ftp.example.com/file.txt
The server did not recognize the FTP command. It may be misspelled, malformed, or unsupported.
The user is not logged in. Authentication is required before this command can be executed.
The username was accepted. The server is now waiting for the password.