파이썬에서 한 줄 ftp 서버


102

간단한 ftp 서버를 수행하기 위해 파이썬에서 한 줄 명령을 사용할 수 있습니까? ftp 서버를 설치하지 않고도 리눅스 박스로 파일을 전송하는 빠르고 임시적인 방법으로 이것을 할 수 있기를 바랍니다. 내장 파이썬 라이브러리를 사용하는 것이 바람직하므로 추가로 설치할 필요가 없습니다.


8
pftftpdlib와 같은 외부 파이썬 라이브러리를 사용하지 않는 한, 한 줄의 코드로 이것을 할 수 있을지 의문입니다. Python에는 내장 ftp 클라이언트가 있지만 서버는 없습니다.
GWW

3
리눅스로 파일 전송 ??? 왜 그냥 scp를 사용하지 않습니까?
Leonmax 2014

sshfs를 사용하지 않는 이유는 무엇 입니까? 가장 빠른 전송 속도 (LAN에서)를 사용하려면 옵션을 사용하십시오 -o Ciphers=arcfour. 즉 sshfs $REMOTEHOST:$DIRECTORY $MOUNTPOINT -o Ciphers=arcfour, 파일 시스템에서 파일을 복사, 이동, 이름 바꾸기, 관리합니다. sshfs는 Mac OSX에서도 사용할 수 있습니다.
erik

답변:


132

필수 꼬인 예 :

twistd -n ftp

그리고 아마도 유용 할 것입니다 :

twistd ftp --help

Usage: twistd [options] ftp [options].
WARNING: This FTP server is probably INSECURE do not use it.
Options:
  -p, --port=           set the port number [default: 2121]
  -r, --root=           define the root of the ftp-site. [default:
                    /usr/local/ftp]
  --userAnonymous=  Name of the anonymous user. [default: anonymous]
  --password-file=  username:password-style credentials database
  --version         
  --help            Display this help and exit.

4
아주 좋아요! 그러나 OP는 다른 라이브러리를 설치하고 싶지 않았기 때문에 표준 파이썬 라이브러리를 사용하도록 요청했습니다.
Andrea Spadaccini

19
맞습니다. 저는 반대 투표를 할 자격이 있지만 실제로 사람들은 Twisted를 알아야합니다. 물론 Twisted는 많은 Linux의 기본 설치에 있습니다.
Ali Afshar

5
사용자는 "필요"가 아니라 "좋아요"라고 답했습니다. 파이썬 내장 라이브러리로는 그렇게 할 방법이 없습니다. 반드시 타사 소프트웨어를 설치해야합니다.
André Puel

4
@Andrea Spadaccini : 미래에서 온 사람들. 이 답변이 실제로 매우 유용하다는 것을 알았습니다. ;)
Benjamin

1
@BenjaminWohlwend : 앞으로 더 멀리 ... 아직도 매우 유용합니다. 내장에 SimpleFTPServer가 필요한 것 같습니다.
MGP

89

Giampaolo Rodola의 pyftpdlib 를 확인하십시오 . 파이썬을위한 최고의 ftp 서버 중 하나입니다. 구글 크롬 (브라우저)과 바자 (버전 관리 시스템)에서 사용된다. RFC-959 용 Python에서 가장 완벽한 구현입니다 (일명 : FTP 서버 구현 사양).

명령 줄에서 :

python -m pyftpdlib

또는 'my_server.py':

#!/usr/bin/env python

from pyftpdlib import servers
from pyftpdlib.handlers import FTPHandler
address = ("0.0.0.0", 21)  # listen on every IP on my machine on port 21
server = servers.FTPServer(address, FTPHandler)
server.serve_forever()

더 복잡한 것을 원한다면 웹 사이트에 더 많은 예제가 있습니다.

명령 줄 옵션 목록을 가져 오려면 :

python -m pyftpdlib --help

표준 ftp 포트를 무시하거나 사용하려면 관리자 권한 (예 : sudo)이 필요합니다.


1
1.3.0 기준 : >>> from pyftpdlib import ftpserver:pyftpdlib\ftpserver.py:54: DeprecationWarning: pyftpdlib.ftpserver module is deprecated
Daniel Reis

2
현재 버전은 2014 년 8 월 27 일 수요일에 업데이트되었습니다. 이제 지원 중단 경고가 없어야합니다.
Brian Bruggeman

안전한가요?
AmirHossein

@TechJS pyftpdlib는 TLS (RFC 4217)를 통한 ftp를 지원합니다.
Brian Bruggeman dec.

@BrianBruggeman 아니요 보안이란 인터넷을 통해 ftp를 노출하지 않고 의도하지 않은 작업을하지 않고 내 데이터를 훔치지 않는 것을 의미합니다. 소스 코드가 프로덕션 환경에서 사용할 수있을만큼 충분히 안전한가요?
AmirHossein dec

40

대신 단선 HTTP 서버 를 사용하지 않는 이유는 무엇 입니까?

python -m SimpleHTTPServer 8000

포트 8000에서 HTTP를 통해 현재 작업 디렉토리의 내용을 제공합니다.

Python 3을 사용하는 경우 대신 작성해야합니다.

python3 -m http.server 8000

2.x 용 SimpleHTTPServer 모듈 문서 및 3.x 용 http.server 문서를 참조하십시오 .

그런데 두 경우 모두 포트 매개 변수는 선택 사항입니다.


29
나는 이것이 그가 파일을 업로드하는 것을 허용하지 않는다고 생각합니다.
로마 플라실

2
이력서 없음, 단일 연결 등
bugmenot123

RomanPlášil @는 것, 다른 끝에 바로 실행 서버는 단순히으로 XD
Reishin

26

위의 답변은 모두 "one liner python ftpd"목표를 달성하기 위해 Python 배포에 타사 라이브러리가 있다고 가정 한 것이지만 @zio가 요청한 것은 아닙니다. 또한 SimpleHTTPServer에는 파일 다운로드를위한 웹 브라우저가 포함되어 있으므로 빠르지 않습니다.

파이썬은 그 자체로 ftpd를 할 수는 없지만, 당신이 사용할 수있는 netcat을을 , nc:

nc기본적으로 모든 UNIX 계열 시스템 (임베디드 시스템 포함)의 내장 도구이므로 " 빠르고 임시로 파일을 전송하는 방법 "에 적합합니다.

1 단계, 수신기 측에서 다음을 실행합니다.

nc -l 12345 | tar -xf -

이것은 데이터를 기다리는 12345 포트에서 수신 대기합니다.

2 단계, 발신자 측 :

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ... | nc $RECEIVER_IP 12345

pv중간에 전송 진행 상황을 모니터링 할 수도 있습니다 .

tar -cf - ALL_FILES_YOU_WANT_TO_SEND ...| pv | nc $RECEIVER_IP 12345

전송이 완료되면의 양면이 nc자동으로 종료되고 작업이 완료됩니다.


2
가정의 말하기 ... 당신은 클라이언트와 유닉스 기계이기 위하여려고하고 있다고 가정 tar하고 nc사용할 수 있습니다. 창문이라면?
jlh

16

pyftpdlib 사용자의 경우. pyftpdlib 웹 사이트에서 이것을 찾았습니다. 이렇게하면 파일 시스템에 대한 쓰기 액세스 권한이있는 익명 ftp가 생성되므로주의해서 사용하십시오. 더 나은 보안을 위해 더 많은 기능을 사용할 수 있습니다.

sudo pip3 install pyftpdlib

python3 -m pyftpdlib -w  

## updated for python3 Feb14:2020

위의 더 이상 사용되지 않는 방법을 사용해 본 사람들에게 도움이 될 수 있습니다.

sudo python -m pyftpdlib.ftpserver


3
sudoVenv에 설치하면 건너 뛸 수 있습니다
balki 2014

1
V3를 변형가 있음을 잊지 마세요 : pip3 install pyftpdlibpython3 -m pyftpdlib -w. 나를위한 매력처럼 작동했습니다.
Ron Klein

3

설치:

pip install twisted

그런 다음 코드 :

from twisted.protocols.ftp import FTPFactory, FTPRealm
from twisted.cred.portal import Portal
from twisted.cred.checkers import AllowAnonymousAccess, FilePasswordDB
from twisted.internet import reactor

reactor.listenTCP(21, FTPFactory(Portal(FTPRealm('./'), [AllowAnonymousAccess()])))
reactor.run()

자세히 알아보기 :

http://twistedmatrix.com/documents/current/core/examples/


3

더 간단한 해결책은 pyftpd 라이브러리를 사용하는 것입니다. 이 라이브러리를 사용하면 Python FTP 서버를 한 줄로 회전 할 수 있습니다. 기본적으로 설치되지는 않지만 간단한 apt 명령을 사용하여 설치할 수 있습니다.

apt-get install python-pyftpdlib

이제 서비스하려는 디렉토리에서 pythod 모듈을 실행하십시오.

python -m pyftpdlib -p 21 

괜찮아 보이지만 어떤 종류의 인증이 발생합니까? "530 인증 실패"가 표시됩니다.
guettli

1

단선 FTP 서버에 대해 잘 모르지만

python -m SimpleHTTPServer

0.0.0.0:8000에서 HTTP 서버를 실행하여 현재 디렉토리에서 파일을 제공합니다. 웹 브라우저를 사용하여 Linux 상자에서 파일을 빠르게 가져 오는 방법을 찾고 있다면 이길 수 없습니다.


1
apt-get install python3-pip

pip3 install pyftpdlib

python3 -m pyftpdlib -p 21 -w --user=username --password=password

-w = write permission

-p = desired port

--user = give your username

--password = give your password

@karel 그들은 동일한 라이브러리를 다루지 만 나에게 중복 된 것처럼 보이지는 않습니다.
Mark Rotteveel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.