如何临时运行 FTP 服务器?

Sca*_*ine 54 server ftp tftp

在 Ubuntu 的世界中,您似乎要么总是运行 FTP 服务器,要么从未运行。也许我是第一个需要使用 Ubuntu 刷新 Cisco、Checkpoint 或 Nokia 映像的网络分析师……我需要一个 FTP 服务器大约 5 分钟,仅此而已。

我正在寻找一个简单的、用户启动的 FTP 服务器。我知道它可能必须与 sudo 一起运行。没关系 - 但我想像普通程序一样启动/停止它。

在 Windows 平台上,这样的工具不胜枚举——我使用 3CDaemon 多年,最近发现了 CoreFTP。两者都很棒。您配置一个用户,将其指向一个目录,然后点击“开始”按钮。几分钟后,您通常已完成并点击“停止”按钮。任务完成。

Ubuntu 上似乎不存在此类工具。我发现了一个Google Code 项目,它可以相当好地创建一个 TFTP 实例(假设它仍然在运行——我已经有大约一年没有使用它了,而且 python 已经开始使用了),但是 FTP 怎么样?外面有什么吗?

Ste*_*zzo 60

您可以使用pyftpdlib使 FTP 服务器变得像一二三一样简单:

  1. 使用 pip 安装 pip install --user pyftpdlib
  2. 使用 运行python -m pyftpdlib-w如果您也想要写访问,请添加。
  3. 没有第三步:)

您现在有一个 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 应该可以正常工作。

    • 它不会像命令行那样警告您使用不安全的配置。即不设置密码或类似的东西。


编辑:既然的APIpyftpdlibftpserver.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)

  • http://paste.ubuntu.com/542726/ 和 http://paste.ubuntu.com/542852/ 已经死了,不幸的是......另外,ftpserver.py 改变了,显然上面的帖子不再成立(最后一个独立版本似乎是 [r1116](https://code.google.com/p/pyftpdlib/source/browse/trunk/pyftpdlib/ftpserver.py?r=1116),这个 [diff](https:/ /code.google.com/p/pyftpdlib/source/diff?spec=svn1117&amp;r=1117&amp;format=side&amp;path=/trunk/pyftpdlib/ftpserver.py))。我已使用新脚本对帖子进行了编辑(在同行评审之前将不可见) (5认同)