web-dev-qa-db-ja.com

WindowsコマンドプロンプトでパッシブFTPモードを使用する方法

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>

ファイアウォールが無効になっています。

46
user2737208

Windows FTPコマンドラインクライアント(ftp.exe)は、どのバージョンのWindowsでもパッシブモードをサポートしていません。ユビキタスファイアウォールとNATにより、今日ではかなり役に立たなくなっています。

quote pasvを使用しても役に立ちません。 サーバーのみがパッシブモードに切り替わり、クライアントは切り替わりません。


代わりに、他のWindows FTPコマンドラインクライアントを使用してください。他のほとんどはパッシブモードをサポートしています。

たとえば、 WinSCP はパッシブモードにデフォルト設定されており、 Windows FTPスクリプトをWinSCPスクリプト に変換するためのガイドが用意されています。

(私はWinSCPの著者です)

45
Martin Prikryl

Windowsは実際にはパッシブモードをサポートしていません。

3つの異なる方法でサーバーにコマンドを送信できますが、Windowsクライアントエンドでパッシブモードが有効になりません。

これらの引数はさまざまなコマンドを送信するためのものであり、pasvはMicrosoftが作成したときに考えていたものではありません。

コマンドラインの使用をサポートするWinSCPのようなサードパーティソフトウェアを見つけて、Windowsネイティブのものの代わりにそれを使用する必要があります。

38
transilvlad

これはコマンドラインに関する質問には直接答えませんが、Windows OSからは、Windowsエクスプローラーを使用します ftp:// username @ server

これはデフォルトでパッシブモードを使用します

コマンドラインでは、アクティブモードがデフォルトです

11
Hammad

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に接続しています

8
Bruce Peterson

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
6
Whome

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>
1
JaeMann Yeh

これはよくある問題です。 ftp接続を開始すると、外部IPのみがpasv接続用のポートを開きます。しかし、NATの後ろのIPは接続を開かないため、パッシブ接続はPASVコマンドで失敗します

接続を開く際に、接続を開くように指定する必要があります

ftp -p {ホスト}

0
Ashutosh Raj