Ubuntu 12.04 LTSにFTPサーバーをセットアップしました。
今、コマンドラインを介してWindows 7からFTPサーバーに接続しようとするとftp.exe
、接続に成功しましたが、ディレクトリのリストを取得できません。エラーが出る
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.
passive
を使用する前に、ls
コマンドを使用してみてください。
FTPクライアントから、FTPサーバーがパッシブモードをサポートしているかどうかを確認するには、ログイン後にquote PASV
。
以下は、パッシブモードのオンとオフを切り替えるvsftpdサーバーへの接続例です。
vsftpd
with pasv_enable=NO
:
# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.3.5)
Name (localhost:john): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quote PASV
550 Permission denied.
ftp>
vsftpd
with pasv_enable=YES
:
# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.3.5)
Name (localhost:john): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quote PASV
227 Entering Passive Mode (127,0,0,1,173,104).
ftp>
FTPをアクティブモードで使用しています。
FTPをアクティブモードで設定することは、ファイアウォールとNATのために、最近では面倒な場合があります。
ローカルファイアウォールまたはNATが原因で、サーバーがクライアントに接続してデータ転送接続を確立できなかった可能性があります。
または、クライアントは外部IPアドレスを認識せず、代わりにサーバーに内部アドレスを提供します(PORT
コマンドで)。サーバーは明らかにそれを使用できません。ただし、vsftpdはデフォルトでFTP制御接続の送信元アドレスとは異なるデータ転送アドレス(port_promiscuous
ディレクティブ)。
myの記事 アクティブモードのネットワーク構成 を参照してください。
可能であれば、通常はクライアント側で追加のセットアップを必要としないため、パッシブモードを使用する必要があります。それは、サーバーが「PASVを使用することを検討する」ことによってあなたに提案したことでもあります。 PASV
は、パッシブモードに入るためのFTPコマンドです。
残念ながら、Windows FTPコマンドラインクライアント(ftp.exe
)は、パッシブモードをまったくサポートしていません。最近ではかなり役に立たなくなります。
代わりに、他のサードパーティのWindows FTPコマンドラインクライアントを使用してください。他のほとんどはパッシブモードをサポートしています。
たとえば、 WinSCP FTPクライアント はパッシブモードにデフォルト設定され、 Windows FTPスクリプトからWinSCPスクリプト に変換するためのガイドがあります。
(私はWinSCPの著者です)
実際にはウィンドウファイアウォールが接続をブロックしているため、これらのコマンドを管理者からcmd.exeに入力する必要があります。
1)netsh advfirewall firewall add rule name="FTP" dir=in action=allow program=%SystemRoot%\System32\ftp.exe enable=yes protocol=tcp
2)netsh advfirewall firewall add rule name="FTP" dir=in action=allow program=%SystemRoot%\System32\ftp.exe enable=yes protocol=udp
何かがうまくいかない場合、これで元に戻すことができます:
1)netsh advfirewall firewall delete rule name="FTP" program=%SystemRoot%\System32\ftp.exe
パッシブモードを使用する必要があります。
Linuxクライアントを使用している場合は、pftp
またはftp -p
を使用します。
man ftp
から:
-p Use passive mode for data transfers. Allows use of ftp in environments where a firewall prevents connections from the outside world back to the client machine. Requires that the ftp server support the PASV command. This is the default if invoked as pftp.