在 Ubuntu 的世界中,您似乎要么总是运行 FTP 服务器,要么从未运行过。也许我是第一个需要使用 Ubuntu 刷新 Cisco、Checkpoint 或 Nokia 映像的网络分析师……我需要一个 FTP 服务器大约 5 分钟,仅此而已。
我正在寻找一个简单的、用户启动的 FTP 服务器。我知道它可能必须与 sudo 一起运行。没关系 - 但我想像普通程序一样启动/停止它。
在 Windows 平台上,这样的工具不胜枚举——我使用 3CDaemon 多年,最近发现了 CoreFTP。两者都很棒。您配置一个用户,将其指向一个目录,然后点击“开始”按钮。几分钟后,您通常已完成并点击“停止”按钮。任务完成。
Ubuntu 上似乎不存在此类工具。我发现了一个Google Code 项目,它可以相当好地创建一个 TFTP 实例(假设它仍然在运行——我已经有大约一年没有使用它了,而且 python 已经开始使用了),但是 FTP 怎么样?外面有什么吗?
Ste*_*zzo 60
您可以使用pyftpdlib使 FTP 服务器变得像一二三一样简单:
pip install --user pyftpdlibpython -m pyftpdlib,-w如果您也想要写访问,请添加。您现在有一个 ftp 服务器,您可以登录以匿名共享您的主目录。这更像是对模块的测试,但它会按照它在锡上所说的去做。
这个命令:
python -m pyftpdlib --directory=FTP --port=2121 --write
Run Code Online (Sandbox Code Playgroud)
将在没有 root 权限的情况下在端口 2121 上提供服务,并向匿名用户授予写访问权限。它还将使用FTP当前工作目录中的目录而不是您的家。键入python ftpserver.py --help以获取有关所有选项的信息。
anonymous@localhost:2121/
请注意,该软件是根据MIT 许可条款发布的,这意味着您基本上可以随心所欲地使用它。阅读许可文本,它只有几行,并了解您的权利。
现在,该脚本不支持用户名和密码作为其独立功能的一部分(出于安全原因,我想)。
所以我添加了这个功能:
除了我提到的所有选项之外,您现在还拥有命令行参数
--username=USERNAME和--password=PASSWORD:
python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j
Run Code Online (Sandbox Code Playgroud)
再次,使用--help来查看它们。
这应该很容易。
我还为它写了一个小 gui:

在此处下载(在 rev. 6 更新)
很抱歉,它有 3999 行长,但它可以完成原版所做的一切。我想把它全部保存在一个文件中。当它在没有任何参数的情况下启动时(即使其可执行并双击它,或为它创建一个启动器),它会启动一个小 gui 供您配置您的服务器。您仍然可以将其作为 python 模块导入或使用上面的命令行 fu。
已知的问题:
除了端口 2121 之外,我没有打扰任何其他事情。这应该很简单,使端口可配置需要复杂的错误处理,我不希望用户打扰。2121 应该可以正常工作。
它不会像命令行那样警告您使用不安全的配置。即不设置密码或类似的东西。
编辑:既然的APIpyftpdlib和ftpserver.py修改(ubuntu的引擎收录的链接都消失了); 上面的大部分帖子都不再适用了。对于 (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()
Run Code Online (Sandbox Code Playgroud)
致电:
$ 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 <<<
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38134 次 |
| 最近记录: |