如何临时运行FTP服务器?


48

在Ubuntu的世界中,似乎您要么总是运行FTP服务器,要么就永远不运行。也许我是第一位需要使用Ubuntu刷新Cisco,Checkpoint或Nokia映像的网络分析师。我可能需要5分钟的FTP服务器,仅此而已。

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

在Windows平台上,这样的工具只有一角钱-我已经使用3CDaemon多年了,最近又找到了CoreFTP。两者都很棒。您配置用户,将其指向目录,然后单击“开始”按钮。几分钟后,通常就可以完成操作,然后单击“停止”按钮。任务完成。

此类工具似乎在Ubuntu上不存在。我找到了一个Google代码项目,该项目可以很好地创建TFTP实例(假设它仍然可以运行-大约一年后我都没有使用它,而python已经继续使用),但是FTP呢?那里有东西吗?


2
太糟糕了,我还没有时间完成JetFTP。它完全符合您的描述,并且可以在没有root特权的情况下运行(当然,您必须使用> 1024的端口)。它无需配置即可使用,并且具有良好的GUI,也可以立即使用。要了解它的外观,请查看JetHTTP,它在设计和界面上都类似。
内森·奥斯曼

谢谢乔治,我也会检查一下。也许两者最好的结合。虽然对我和python来说还很早,所以我怀疑在那里会有很大帮助!
Scaine 2010年

Answers:


52

使用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/

替代文字

请注意,该软件是根据MIT许可证的条款发布的,这意味着您基本上可以随心所欲地使用它。阅读许可证文本,只有几行,并且知道您的权利。


现在,该脚本不支持用户名和密码作为其独立功能的一部分(出于安全考虑,我想)。

因此,我添加了该功能:

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

--username=USERNAME--password=PASSWORD

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

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

这应该尽可能简单。


我也为此写了一些GUI:

替代文字

  • 在此处下载(版本6更新)

    很抱歉,它的长度为3999行,但它可以完成原始操作。我想将所有内容保存在一个文件中。当启动时没有任何参数(即使其可执行并双击,或为其创建启动器)时,它将启动一些gui,供您配置服务器。您仍然可以将其导入为python模块或使用上述命令行fu。

    已知的问题:

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

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


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

致电:

$ 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 <<<
...

这看起来像是一个很棒的模块-因为我正在尝试学习python,所以听起来这是围绕构建GUI的一个很好的起点。。。恐怕我没有将其标记为答案(尽管我(对此进行了投票),希望有人能知道已经基于GUI的工具。尽管感谢您的注意,也感谢您的修改版本。
Scaine 2010年

谢谢:-)我不会放弃,现在为它编写一个GUI。:P
Stefano Palazzo

1
感谢Stefano!我没想到!这很棒-不仅可以在今晚试用GUI,而且还可以从一开始就获得一些教学指导。非常感谢!
Scaine 2010年

5
paste.ubuntu.com/542726paste.ubuntu.com/542852都已死,很不幸...而且,ftpserver.py也已更改,并且显然以上帖子不再适用(最新的独立修订版似乎是r1116,与此相关diff)。我使用新脚本对帖子进行了编辑(直到同行评审后才可见)
sdaau 2014年

1
只是对于那里的菜鸟来说,要使用上述脚本,您需要安装“ pyftpdlib”库,然后才能运行...“ sudo apt-get install python-pip”,然后“ pip install pyftpdlib” ...以及你们都准备好了!
D.Snap

1
  • 您可以使用 pure-ftpd 安装纯ftpd

  • 如果您有ssh服务器,则可以使用scp


3
初学者可以在5分钟内安装Pure-FTPd服务器。只需安装软件包,输入“ pure-ftpd&”即可,就这么简单。您已经有运行中的服务器,并且客户端可以开始连接。
hhlp 2010年

1
是的,我很欣赏Pure很容易,尤其是使用pure-admin gui软件包-我将其用于永久FTP服务器。但是,使用PureFTP时,您总是/正在运行FTP,这对于通过WIFI连接的笔记本电脑是一种安全隐患。我不想记住打开防火墙并担心它消耗的(可能很小的)资源。恐怕scp通常不是一种选择,尽管某些设备正在变得越来越好-我认为最新的F5映像使用scp,这与Cisco的Call Manager一样。
Scaine 2010年

2
我什至认为您不需要在安装软件包后启动PureFTP守护程序。(我认为它应该由postinst程序包中的脚本启动。)
Nathan Osman 2010年

0

对于那些在路由器之间来回复制文件的人,您可能需要尝试使用此工具:tftpgui

它对我有用,很容易配置。它也是一个Python脚本,但是执行tftp而不是ftp。您所要做的就是安装python-tk并下载脚本

唯一需要注意的是Ubunutu默认为Phython2,因此启动脚本的最佳方法是:

sudo python3 ./tftpgui.py

然后,您可以在GUI中对其进行配置。完成后,按退出即可。


2
谢谢Bo-我已经在问题中提到了这个有用的工具。但是,我想要类似TFTPgui的FTP,直到Stefano敲掉他的python gui时才存在。
Scaine 2013年

pythons ftplib可以正常工作,并且如果处理大量设备(1k +),则脚本编写起来容易得多
lxx
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.