シンプルなftpサーバーを実行するために、Pythonで1行のコマンドを使用することは可能ですか? FTP サーバーをインストールせずにファイルを Linux ボックスに転送するための迅速かつ一時的な方法として、これを実行できるようにしたいと考えています。組み込みの Python ライブラリを使用する方法が望ましいので、追加でインストールする必要はありません。
9 に答える
義務的なTwisted の例:
twistd -n ftp
そしておそらく便利です:
twistd ftp --help
Usage: twistd [options] ftp [options].
WARNING: This FTP server is probably INSECURE do not use it.
Options:
-p, --port= set the port number [default: 2121]
-r, --root= define the root of the ftp-site. [default:
/usr/local/ftp]
--userAnonymous= Name of the anonymous user. [default: anonymous]
--password-file= username:password-style credentials database
--version
--help Display this help and exit.
Giampaolo Rodola のpyftpdlibをチェックしてください。これは、Python 用の最高の ftp サーバーの 1 つです。Google の chromium (ブラウザ) と bazaar (バージョン管理システム) で使用されています。RFC-959 (別名: FTP サーバー実装仕様)のPython での最も完全な実装です。
インストールするには:
pip3 install pyftpdlib
コマンドラインから:
python3 -m pyftpdlib
または「my_server.py」:
#!/usr/bin/env python3
from pyftpdlib import servers
from pyftpdlib.handlers import FTPHandler
address = ("0.0.0.0", 21) # listen on every IP on my machine on port 21
server = servers.FTPServer(address, FTPHandler)
server.serve_forever()
より複雑なものが必要な場合は、Web サイトにさらに例があります。
コマンド ライン オプションのリストを取得するには、次のようにします。
python3 -m pyftpdlib --help
標準の ftp ポートを上書きまたは使用する場合は、管理者権限 (sudo など) が必要になることに注意してください。
代わりに1行のHTTPサーバーを使用してみませんか?
python -m SimpleHTTPServer 8000
ポート8000でHTTPを介して現在の作業ディレクトリの内容を提供します。
Python 3を使用する場合は、代わりに次のように記述してください。
python3 -m http.server 8000
2.xのSimpleHTTPServerモジュールのドキュメントと3.xのhttp.serverのドキュメントを参照してください。
ちなみに、どちらの場合もポートパラメータはオプションです。
上記の回答はすべて、「ワンライナーpython ftpd」の目標を達成するために、Pythonディストリビューションにサードパーティのライブラリがいくつかあることを前提としていましたが、@zioが求めていたのはそうではありません. また、SimpleHTTPServer には、ファイルをダウンロードするための Web ブラウザーが含まれており、十分に高速ではありません。
Python はそれ自体で ftpd を実行できませんが、netcatを使用できnc
ます。
nc
基本的に、UNIX ライクなシステム (組み込みシステムも含む) の組み込みツールであるため、「ファイルをすばやく一時的に転送する方法」に最適です。
ステップ 1 の受信側で、次のコマンドを実行します。
nc -l 12345 | tar -xf -
これはポート 12345 でリッスンし、データを待ちます。
ステップ 2、送信者側:
tar -cf - ALL_FILES_YOU_WANT_TO_SEND ... | nc $RECEIVER_IP 12345
pv
途中で転送の進行状況を監視することもできます。
tar -cf - ALL_FILES_YOU_WANT_TO_SEND ...| pv | nc $RECEIVER_IP 12345
転送が完了すると、 の両側がnc
自動的に終了し、ジョブが完了します。
pyftpdlib ユーザー向け。これは pyftpdlib Web サイトで見つけました。これにより、ファイルシステムへの書き込みアクセス権を持つ匿名 ftp が作成されるため、十分に注意して使用してください。セキュリティを強化するために、内部でさらに多くの機能を利用できます。
sudo pip3 install pyftpdlib
python3 -m pyftpdlib -w
## updated for python3 Feb14:2020
上記の非推奨の方法を使用しようとした人にとっては役立つかもしれません。
sudo python -m pyftpdlib.ftpserver
より簡単な解決策は、pyftpd ライブラリを使用することです。このライブラリを使用すると、Python FTP サーバーを 1 行でスピンできます。ただし、デフォルトではインストールされませんが、単純な apt コマンドを使用してインストールできます
apt-get install python-pyftpdlib
提供したいディレクトリから pythod モジュールを実行するだけです
python -m pyftpdlib -p 21
インストール:
pip install twisted
次にコード:
from twisted.protocols.ftp import FTPFactory, FTPRealm
from twisted.cred.portal import Portal
from twisted.cred.checkers import AllowAnonymousAccess, FilePasswordDB
from twisted.internet import reactor
reactor.listenTCP(21, FTPFactory(Portal(FTPRealm('./'), [AllowAnonymousAccess()])))
reactor.run()
深くなる:
1行のFTPサーバーについてはわかりませんが、知っている場合は
python -m SimpleHTTPServer
0.0.0.0:8000でHTTPサーバーを実行し、現在のディレクトリからファイルを提供します。Webブラウザを使用してLinuxボックスからファイルをすばやく取得する方法を探しているなら、それを打ち負かすことはできません。