当前位置: 首页>>技术问答>>正文


如何临时运行FTP服务器?

, , ,

问题描述

在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服务器:

  1. 使用pip pip install --user pyftpdlib安装

  2. 如果您想要写访问权限,请使用python -m pyftpdlib运行,添加-w

  3. 没有第三步:)

您现在有一个ftp服务器,您可以登录以匿名共享您的主目录。这更像是对模块的测试,但它完成了它在锡上的说法。

这个命令:

python -m pyftpdlib --directory=FTP --port=2121 --write

将在没有root权限的情况下在端口2121上提供服务并向匿名用户授予写入权限。它还将使用当前工作目录中的目录FTP而不是您的主目录。键入python ftpserver.py --help以获取有关所有选项的信息。

  • 登录anonymous@localhost:2121/

server,ftp,tftp,ubuntu

请注意,该软件是根据MIT License的条款发布的,这意味着您可以随心所欲地使用它。阅读许可文本,只需几行,并了解您的权利。


现在,这个脚本不支持用户名和密码作为stand-alone功能的一部分(出于安全考虑,我想象)。

所以我添加了这个功能:

除了我提到的所有选项之外,您现在还拥有命令行参数

--username=USERNAME--password=PASSWORD

python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j

再次,使用--help查看所有内容。

这应该像它一样容易。


我也为它写了一点gui:

server,ftp,tftp,ubuntu

  • Download it here(在第6版更新)我很遗憾它长达3999行,但它可以完成原作所做的一切。我想把它全部保存在一个文件中。当它没有任何参数启动时(即使其可执行并双击它,或create a launcher for it),它会启动一个小的gui供您配置服务器。您仍然可以将其作为python模块导入或使用上面的命令行fu。已知的问题:

    • 除了端口2121之外,我没有其他任何烦恼。这应该很简单,使端口可配置需要复杂的错误处理,我不希望用户打扰。 2121应该总能正常工作。

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


编辑:自pyftpdlibftpserver.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 <<<
...

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1791.html,未经允许,请勿转载。