python中的一线ftp服务器


101

是否可以在python中使用一行命令来执行简单的ftp服务器?我希望能够以这种快速和临时的方式来执行此操作,而无需将FTP服务器安装到Linux机器上。最好是使用内置的python库的方法,因此无需额外安装。


8
除非您使用像pftftpdlib这样的外部python库,否则我怀疑您可以用一行代码来做到这一点。Python具有内置的ftp客户端,但没有服务器。
GWW 2011年

3
传输文件到Linux ???为什么不只是使用scp?
Leonmax 2014年

为什么不使用sshfs?为了获得最快的传输速率(在LAN中),请使用选项-o Ciphers=arcfour,即sshfs $REMOTEHOST:$DIRECTORY $MOUNTPOINT -o Ciphers=arcfour复制,移动,重命名,管理文件系统中的文件。sshfs也可用于Mac OSX。
erik

Answers:


132

强制性扭曲示例:

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.

4
非常好!但是OP要求使用标准的python库,因为他不想安装其他库。
Andrea Spadaccini 2011年

19
是的,我值得投票,但实际上,人们应该知道Twisted。当然,Twisted是许多Linux的基础安装。
Ali Afshar

5
用户不应该投下反对票,用户说“最好”,而不是“必需”。使用python内置库无法做到这一点,您必须安装第三方软件。
安德烈·普埃尔

4
@Andrea Spadaccini:来自未来的人们。我们发现这个答案确实非常有用。;)
Benjamin Wohlwend 2012年

1
@BenjaminWohlwend:在更远的将来...仍然非常有用。听起来我们需要内置的SimpleFTPServer。
MGP

89

退房pyftpdlib从詹Rodola。它是python最好的ftp服务器之一。它用于Google的Chrome(浏览器)和Bazaar(版本控制系统)中。它是Python上最完整的RFC-959实现(又名:FTP服务器实现规范)。

在命令行中:

python -m pyftpdlib

或者'my_server.py':

#!/usr/bin/env python

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()

如果您想要更复杂的内容,则网站上还有更多示例。

要获取命令行选项列表:

python -m pyftpdlib --help

注意,如果要覆盖或使用标准ftp端口,则需要管理员权限(例如sudo)。


1
由于1.3.0 >>> from pyftpdlib import ftpserverpyftpdlib\ftpserver.py:54: DeprecationWarning: pyftpdlib.ftpserver module is deprecated
丹尼尔·雷斯

2
2014年8月27日星期三更新了当前版本。现在不应该有弃用警告。
Brian Bruggeman 2014年


@TechJS pyftpdlib支持通过TLS(RFC 4217)的ftp。
Brian Bruggeman

@BrianBruggeman不,通过安全性,我的意思是不通过互联网公开ftp,不做任何意外的事情,也不窃取我的数据,我的意思是源代码是否足够安全,可以在生产环境中使用?
阿米尔·侯赛因(AmirHossein)

39

您为什么不使用单行HTTP服务器呢?

python -m SimpleHTTPServer 8000

将通过HTTP在端口8000上提供当前工作目录的内容。

如果您使用Python 3,则应改写

python3 -m http.server 8000

有关2.x,请参见SimpleHTTPServer模块文档;有关3.x,请参见http.server文档。

顺便说一下,在两种情况下,port参数都是可选的。


29
我认为这不允许他上传文件。
RomanPlášil2014年

2
没有简历,单一连接,等等
bugmenot123

@RomanPlášil它将在xD的另一端运行服务器,就像这样
Reishin

26

以上所有答案均假设您的Python发行版将具有一些第三方库,以实现“一个线性python ftpd”目标,但@zio并非如此。另外,SimpleHTTPServer涉及Web浏览器来下载文件,这还不够快。

Python不能做的ftpd本身,但可以使用的netcatnc

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将自动退出,并完成工作。


2
说到假设...您假设客户端将是具有tarnc可用的UNIX计算机。如果是窗户怎么办?
jlh

16

对于pyftpdlib用户。我在pyftpdlib网站上找到了这个。这将创建对您的文件系统具有写访问权的匿名ftp,因此请谨慎使用。更多功能可提供更好的安全性,所以请看看:

sudo pip3 install pyftpdlib

python3 -m pyftpdlib -w  

## updated for python3 Feb14:2020

对于尝试使用上述不推荐使用的方法的用户可能会有所帮助。

须藤python -m pyftpdlib.ftpserver


3
sudo如果您安装在venv中,则可以跳过
balki 2014年

1
不要忘记有v3变体:pip3 install pyftpdlibpython3 -m pyftpdlib -w。对我来说就像一个魅力。
罗恩·克莱因 Ron Klein)

3

安装:

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()

深入了解:

http://twistedmatrix.com/documents/current/core/examples/


3

更简单的解决方案将是用户pyftpd库。该库允许您将Python FTP服务器转为一行。虽然默认情况下未安装它,但是我们可以使用简单的apt命令安装它

apt-get install python-pyftpdlib

现在从您要提供的目录中运行pythod模块

python -m pyftpdlib -p 21 

看起来不错,但是会进行哪种身份验证?我收到“ 530身份验证失败”。
guettli

1

我不知道单线FTP服务器,但是如果您知道

python -m SimpleHTTPServer

它将在0.0.0.0:8000上运行HTTP服务器,以提供当前目录之外的文件。如果您正在寻找一种通过Web浏览器快速从Linux盒子中获取文件的方法,那么您将无法击败它。


1
apt-get install python3-pip

pip3 install pyftpdlib

python3 -m pyftpdlib -p 21 -w --user=username --password=password

-w = write permission

-p = desired port

--user = give your username

--password = give your password

@karel它们涵盖相同的库,但是对我而言,它们看起来不像是重复的。
Mark Rotteveel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.