Ubuntuでは、ftp -p
パッシブモードが正常に機能します。
Windowsで同じことを行うにはどうすればよいですか?
quote pasv
で試しましたが、次のエラーが表示されます:
230 OK. Current restricted directory is /
ftp> quote pasv
227 Entering Passive Mode (31,170,167,221,116,239)
ftp> cd os
250 OK. Current directory is /os
ftp> dir
500 I won't open a connection to 10.23.16.248 (only to 113.193.128.177)
425 No data connection
ftp>
ファイアウォールが無効になっています。
Windows FTPコマンドラインクライアント(ftp.exe
)は、どのバージョンのWindowsでもパッシブモードをサポートしていません。ユビキタスファイアウォールとNATにより、今日ではかなり役に立たなくなっています。
quote pasv
を使用しても役に立ちません。 サーバーのみがパッシブモードに切り替わり、クライアントは切り替わりません。
代わりに、他のWindows FTPコマンドラインクライアントを使用してください。他のほとんどはパッシブモードをサポートしています。
たとえば、 WinSCP はパッシブモードにデフォルト設定されており、 Windows FTPスクリプトをWinSCPスクリプト に変換するためのガイドが用意されています。
(私はWinSCPの著者です)
Windowsは実際にはパッシブモードをサポートしていません。
3つの異なる方法でサーバーにコマンドを送信できますが、Windowsクライアントエンドでパッシブモードが有効になりません。
これらの引数はさまざまなコマンドを送信するためのものであり、pasv
はMicrosoftが作成したときに考えていたものではありません。
コマンドラインの使用をサポートするWinSCPのようなサードパーティソフトウェアを見つけて、Windowsネイティブのものの代わりにそれを使用する必要があります。
これはコマンドラインに関する質問には直接答えませんが、Windows OSからは、Windowsエクスプローラーを使用します ftp:// username @ server
これはデフォルトでパッシブモードを使用します
コマンドラインでは、アクティブモードがデフォルトです
quote PASV
コマンドは、ftp.exe
プログラムに対するコマンドではなく、データ転送のために上位ポートを要求するFTPサーバーに対するコマンドです。パッシブ転送は、これらの上位ポートを介してFTPデータを転送する一方で、下位ポートで制御が維持される転送です。
Windows ftp.exe
プログラムを使用してFTPサーバーコマンドを送信し、2つのFTPサーバー間でパッシブデータ転送を行うことができます。標準のWindowsインストールでは、FTPサーバーサービスがパッシブ転送のエンドポイントとして実行されません。したがって、標準のWindowsボックスでパッシブ転送が必要な場合、ほとんどのWindows環境では接続の1つが機能しないため、ftp.exe
以外のソリューションがlocalhostへのFTPとして必要です。
次のように、2つの異なるホスト(同じホスト上の2つの接続ではない)間でパッシブFTP転送を実行できます。
2つのプロンプトを開き、1つを使用してftp.exe
をソースFTPサーバーに接続し、もう1つをftp.exe
を使用して宛先FTPサーバーに接続します。
ここで、生のコマンドPASVおよびPORTを使用して、サーバー間にパッシブ接続を確立します。 quote PASV
コマンドは、EllipsisのIP /ポートで応答します。そのデータをquote PORT <data>
コマンドに使用します。ファイアウォールが4つのポートの1つ以上をブロックしていないと仮定して、パッシブリンクが確立されました(FTP制御用に2つ、FTPデータ用に2つ)
次に、受信FTPサーバーへのquote STOR <filename>
コマンドを使用してデータの受信を開始し、ソースFTPサーバーに制御コマンドquote RETR <filename>
を送信します。
だから私にとって:
client 1
> ftp.exe server1
ftp> quote PASV
227 Entering Passive Mode (10,0,3,1,54,161)
client 2
> ftp.exe server2
ftp> quote PORT 10,0,3,1,54,54,161
ftp> quote STOR myFile
client 1
ftp> quote RETR myFile
Cavet:古いFTPサーバーYMMVに接続しています
CURLクライアントはFTPプロトコルをサポートし、パッシブモードで動作します。 SSLなしでダウンロードバージョンを取得すると、openssl.dllライブラリは必要ありません。 1つのcurl.exeコマンドラインアプリケーション。
http://www.paehl.com/open_source/?CURL_7.35.
curl.exe -T c:\test\myfile.dat ftp://ftp.server.com/some/folder/myfile.dat --user myuser:mypwd
もう1つはPuTTY psftp.exeですが、サーバーキー検証プロンプトにはトリックが必要です。このコマンドラインは、プロンプトにNOを入力します。つまり、今回はキーがレジストリに保存されないことを意味します。外部スクリプトファイルが必要ですが、複数のファイルを上下にコピーする場合に便利な場合があります。
http://www.chiark.greenend.org.uk/~sgtatham/PuTTY/download.html
echo n | psftp.exe ftp.server.com -l myuser -pw mypwd -b script.txt
script.txt(任意のftpコマンドを入力できます)
put "C:\test\myfile.dat" "/some/folder/myfile.dat"
quit
Windows 10を使用している場合は、Linux、WSL、およびUbuntu用のWindowsサブシステムをインストールします。
$ ftp 192.168.1.39
Connected to 192.168.1.39.
............
230 Logged in successfully
Remote system type is MSDOS.
ftp> passive
Passive mode on.
ftp> passive
Passive mode off.
ftp>
これはよくある問題です。 ftp接続を開始すると、外部IPのみがpasv接続用のポートを開きます。しかし、NATの後ろのIPは接続を開かないため、パッシブ接続はPASVコマンドで失敗します
接続を開く際に、接続を開くように指定する必要があります
ftp -p {ホスト}