问题描述
在Ubuntu的世界里,你似乎总是运行一个FTP服务器,或者你永远不会。也许我是第一个使用Ubuntu需要闪存思科,Checkpoint或诺基亚映像的网络分析师…我需要一台FTP服务器大概5分钟,不多于此。
我正在寻找bare-bones,user-initiated FTP服务器。我知道它可能必须与sudo一起运行。那很好 – 但我想像正常程序一样启动/停止它。
在Windows平台上,这样的工具只有一打 – 我已经使用了3CDaemon多年,最近发现了CoreFTP。两者都很棒。您配置用户,将其指向目录,然后单击”Start”按钮。几分钟后,你已经完成了,你点击了”Stop”按钮。任务完成。
这些工具似乎不存在于Ubuntu上。我找到了一个Google Code project,它可以很好地创建一个TFTP实例(假设它仍然运行 – 我在大约一年内没有使用它并且python已经继续运行),但是如何进行FTP?还有什么吗?
最佳解决办法
使用pyftpdlib,您可以轻松获得一台二三的FTP服务器:
-
使用pip
pip install --user pyftpdlib
安装 -
如果您想要写访问权限,请使用
python -m pyftpdlib
运行,添加-w
。 -
没有第三步:)
您现在有一个ftp服务器,您可以登录以匿名共享您的主目录。这更像是对模块的测试,但它完成了它在锡上的说法。
这个命令:
python -m pyftpdlib --directory=FTP --port=2121 --write
将在没有root权限的情况下在端口2121上提供服务并向匿名用户授予写入权限。它还将使用当前工作目录中的目录FTP
而不是您的主目录。键入python ftpserver.py --help
以获取有关所有选项的信息。
-
登录
anonymous@localhost:2121/
请注意,该软件是根据MIT License的条款发布的,这意味着您可以随心所欲地使用它。阅读许可文本,只需几行,并了解您的权利。
现在,这个脚本不支持用户名和密码作为stand-alone功能的一部分(出于安全考虑,我想象)。
所以我添加了这个功能:
除了我提到的所有选项之外,您现在还拥有命令行参数
--username=USERNAME
和--password=PASSWORD
:
python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j
再次,使用--help
查看所有内容。
这应该像它一样容易。
我也为它写了一点gui:
-
Download it here(在第6版更新)我很遗憾它长达3999行,但它可以完成原作所做的一切。我想把它全部保存在一个文件中。当它没有任何参数启动时(即使其可执行并双击它,或create a launcher for it),它会启动一个小的gui供您配置服务器。您仍然可以将其作为python模块导入或使用上面的命令行fu。已知的问题:
-
除了端口2121之外,我没有其他任何烦恼。这应该很简单,使端口可配置需要复杂的错误处理,我不希望用户打扰。 2121应该总能正常工作。
-
它不会像命令行那样警告您使用不安全的配置。即没有设置密码或类似的东西。
-
编辑:自pyftpdlib
和ftpserver.py
的API发生变化(ubuntu pastebin链接消失了);上面的大部分帖子都不再适用了。对于(2014)版本的pyftpdlib
,使用此脚本(ftpserver-cli.py
)实现与上述相同:
#!/usr/bin/env python
# ftpserver-cli.py
import sys
sys.path.append("/path/to/pyftpdlib-svn") # enter your proper path here
import argparse
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
def processCmdLineOptions():
global optparser
optparser = argparse.ArgumentParser(description="ftpserver-cli",
formatter_class=argparse.RawDescriptionHelpFormatter)
optparser.add_argument('-u', '--username', action='store', type=str,
default="user", help="username")
optparser.add_argument('-p', '--password', action='store', type=str,
default="12345", help="password")
optparser.add_argument('-t', '--port', action='store', type=int,
default="21", help="port")
optparser.add_argument('-d', '--directory', action='store', type=str,
default="/home/stefano/Projekte/", help="port")
optargs = optparser.parse_args(sys.argv[1:]) #(sys.argv)
return optargs
optargs = processCmdLineOptions()
print("Using: user: %s pass: %s port: %d dir: %s" % (optargs.username, optargs.password, optargs.port, optargs.directory))
authorizer = DummyAuthorizer()
authorizer.add_user(optargs.username, optargs.password, optargs.directory, perm="elradfmw")
#authorizer.add_anonymous("/home/nobody")
handler = FTPHandler
handler.authorizer = authorizer
server = FTPServer(("127.0.0.1", optargs.port), handler)
server.serve_forever()
致电:
$ sudo python ftpserver-cli.py --directory=/tmp/srvtest
Using: user: user pass: 12345 port: 21 dir: /tmp/srvtest
[I 14-03-02 21:40:57] >>> starting FTP server on 127.0.0.1:21, pid=19286 <<<
...