FTP 서버를 일시적으로 실행하려면 어떻게합니까?


48

우분투 세계에서는 항상 FTP 서버를 실행하거나 전혀 하지 않는 것 같습니다. 아마도 Ubuntu를 사용하여 Cisco, Checkpoint 또는 Nokia 이미지를 플래시해야하는 최초의 네트워크 분석가 일 것입니다. 5 분 동안 FTP 서버가 필요합니다.

사용자가 시작한 기본 FTP 서버를 찾고 있습니다. 나는 그것이 sudo와 함께 실행되어야 할 것임을 이해합니다. 괜찮습니다.하지만 일반 프로그램처럼 시작 / 중지하고 싶습니다.

Windows 플랫폼에서 이러한 도구는 수십 가지입니다. 저는 수년간 3CDaemon을 사용했으며 최근에 CoreFTP를 발견했습니다. 둘 다 우수합니다. 사용자를 구성하고 디렉토리를 가리킨 다음 "시작"버튼을 누르십시오. 몇 분 후, 일반적으로 "Stop"버튼을 누르십시오. 작업이 완료되었습니다.

이러한 도구는 우분투에 존재하지 않는 것 같습니다. TFTP 인스턴스를 합리적으로 멋지게 만드는 Google 코드 프로젝트 를 찾았 습니다 (여전히 실행 중이라고 가정합니다-약 1 년 동안 사용하지 않았고 파이썬이 이동했다고 가정). FTP는 어떻습니까? 밖에 있습니까?


2
JetFTP를 끝낼 시간이 없었습니다. 그것은 않습니다 정확히 당신이 무엇을 설명, 그리고 그것은 (당신이 포트 과정> 1024를 사용하는 것) 루트 권한없이 실행할 수 있습니다. 구성이없고 GUI도 훌륭합니다. 어떻게 될지에 대한 아이디어를 얻으려면 디자인과 인터페이스가 비슷한 JetHTTP를 확인하십시오 .
Nathan Osman

고마워 조지, 나도 확인합니다. 아마도 둘 중 가장 좋은 것이 결합 될 수 있습니다. 그래도 나와 파이썬의 초기에는 많은 도움이 될 것입니다.
Scaine

답변:


52

pyftpdlib을 사용하여 FTP 서버를 한 두 세만큼 쉽게 사용할 수 있습니다 .

  1. pip로 설치 pip install --user pyftpdlib
  2. 으로 실행 하고 쓰기 권한을 원하면 python -m pyftpdlib추가 하십시오 -w.
  3. 세 단계는 없습니다 :)

이제 홈 디렉토리를 익명으로 공유하기 위해 로그인 할 수있는 ftp 서버가 있습니다. 이것은 모듈의 테스트를 의미하는 것이지만 주석에서 말하는 것을 수행합니다.

이 명령은

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

루트 권한없이 포트 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를 시작합니다. 여전히 파이썬 모듈로 가져 오거나 위의 명령 줄 fu를 사용할 수 있습니다.

    알려진 문제 :

    • 포트 2121 이외의 다른 것을 방해하지 않았습니다. 이것은 간단해야합니다. 포트를 구성 할 수있게하려면 복잡한 오류 처리가 필요하므로 사용자가 귀찮게하고 싶지 않습니다. 2121은 항상 잘 작동합니다.

    • 명령 행에서와 같이 안전하지 않은 구성 사용에 대해서는 경고하지 않습니다. 즉 암호 또는 이와 유사한 것을 설정하지 않습니다.


편집 : API pyftpdlibftpserver.py변경 이후 (및 우분투 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 <<<
...

이것은 훌륭한 모듈처럼 보입니다. 파이썬을 배우려고 노력하고 있기 때문에 이것이 GUI를 구축하기위한 훌륭한 출발점 인 것처럼 들립니다 ... 나는 이것을 대답으로 표시하지 않을 것을 두려워합니다. 누군가가 이미 GUI 기반 도구를 알고 있기를 바랍니다. 그럼에도 불구하고 고마워하고 수정 된 버전에 감사드립니다.
Scaine

고마워 :-) 나는 그것을 위해 GUI 프로그래밍을 포기하지 않을 것이다. : P
Stefano Palazzo

1
고마워 Stefano! 나는 그것을 기대하지 않았다! 이것은 훌륭합니다. (조용히) GUI뿐만 아니라 처음에 그것을 어떻게 두드 렸는지에 대한 약간의 교육 안내서도 있습니다. 많은 감사합니다!
Scaine

5
paste.ubuntu.com/542726paste.ubuntu.com/542852 는 불행히도 죽었습니다 ... ftpserver.py도 변경되었으며 분명히 위의 게시물은 더 이상 유지되지 않습니다 (마지막 독립형 개정은 r1116 인 것 같습니다. diff ). 새 스크립트를 사용하여 게시물을 수정했습니다 (동료 검토가있을 때까지 보이지 않음)
sdaau

1
그냥 멍청한 놈을 위해 위의 스크립트를 사용하려면 "pyftpdlib"라이브러리를 설치하고 실행하려면 ... "sudo apt-get install python-pip"그리고 "pip install pyftpdlib"... 및 당신은 모두 설정!
D.Snap

1
  • pure-ftpd를 사용할 수 있습니다 pure-ftpd 설치

  • ssh 서버가 있으면 scp 를 사용할 수 있습니다 .


3
초보자는 5 분 안에 Pure-FTPd 서버를 설치할 수 있습니다. "pure-ftpd &"를 입력하고 패키지를 설치하는 것만 큼 간단 할 수 있습니다. 이미 실행중인 서버가 있으며 클라이언트가 연결을 시작할 수 있습니다.
hhlp

1
그러나 Pure-admin GUI 패키지를 사용하면 Pure가 쉽다는 점을 잘 알고 있습니다. 영구 FTP 서버에 사용합니다. 그러나 PureFTP를 사용하면 FTP를 / always / 실행하고 있습니다. 이는 WIFI를 통해 연결되는 랩톱의 보안 위험입니다. 방화벽을 켜고 (아마도) 사용하는 리소스에 대해 걱정할 필요가 없습니다. 일부 장치가 나아지고 있지만 scp가 일반적으로 옵션이 아니라고 생각합니다. 요즘 Cisco의 Call Manager와 마찬가지로 최신 F5 이미지는 scp를 사용한다고 생각합니다.
Scaine

2
패키지를 설치 한 후 PureFTP 데몬을 시작해야한다고 생각하지 않습니다. ( postinst패키지에 스크립트 로 시작해야한다고 생각했습니다 .)
Nathan Osman

0

라우터와 파일을 복사하는 사람들을 위해이 도구를 사용해보십시오 : tftpgui

그것은 나를 위해 일했고 구성하기가 매우 쉽습니다. 또한 Python 스크립트이지만 ftp 대신 tftp를 수행합니다. python-tk를 설치하고 스크립트를 다운로드하기 만하면됩니다.

알아 두어야 할 유일한 것은 Ubunutu의 기본값은 Phython2이므로 스크립트를 시작하는 가장 좋은 방법은 다음과 같습니다.

sudo python3 ./tftpgui.py

그런 다음 GUI에서 구성 할 수 있습니다. 완료되면 exit를 누르십시오.


2
감사 보-나는 내 질문에 그 유용한 도구를 이미 언급했습니다. 그러나 나는 Stefano가 파이썬 GUI를 쓰러 뜨릴 때까지 존재하지 않는 FTP 용 TFTPgui와 같은 것을 원했습니다.
Scaine

파이썬 ftplib는 대신 잘 작동하고 많은 장치 (1k +)를 다루는 경우 스크립트하기가 훨씬 쉽습니다.
lxx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.