Ansible에서 FTP 서버에 파일을 추가하고 싶었습니다 ...

Ansible로 비SFTP인 FTP서버에 파일을 PUT하려고 시행착오했지만, 결국 curl 두드리는 것이 베스트일까라고 생각한 대로입니다.
curl--ftp-create-dirs 옵션 굉장히 편리하다고 생각했다.

  • curl - How To Use
  • --ftp-create-dirs


  • 환경


    $ docker inspect --format="{{.Config.Image}}" pure-ftpd
    stilliard/pure-ftpd:hardened
    
    $ curl --version
    curl 7.54.0 (x86_64-apple-darwin17.0) libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0
    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
    Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz HTTP2 UnixSockets HTTPS-proxy
    

    curl에서 다양한


    $ curl -I ftp://foo:bar@localhost/1/; echo $?
    0
    
    $ curl -I ftp://foo:bar@localhost/404; echo $?
    curl: (19) Given file does not exist
    19
    
    $ curl --silent ftp://foo:bar@localhost/newdir/newfile --ftp-create-dirs --upload-file /path/to/test.txt; echo $?
    0
    
    $ curl -I ftp://foo:bar@localhost/newdir/newfile; echo $?
    Last-Modified: Wed, 22 Aug 2018 05:51:55 GMT
    Content-Length: 143
    Accept-ranges: bytes
    0
    

    예상대로 디렉토리를 만들지 않는 경우


    curl 의 사양인가 Pure-FTPd 의 사양인가는 또한 RFC 로 정의되고 있는지, 거기까지 미조사입니다만 작성하는 디렉토리의 명칭에 반각 스페이스 (0x20) を含む場合、半角スペースが _ 로 치환된 명칭의 디렉토리 작성되었음을 확인했습니다.

    そもそもそこまで考慮するなら FTPサーバーとの通信に curl 사용하지 않는 것이 좋다고 개인적으로는 생각하기 때문에 더 이상은 추구하고 있지 않습니다

    $ curl --silent --ftp-create-dirs "ftp://foo:[email protected]/x/ z/xz.log" --upload-file "x/ z/xz.log" -vvvvvvvvvvv
    *   Trying 127.0.0.1...
    * TCP_NODELAY set
    * Connected to 127.0.0.1 (127.0.0.1) port 21 (#0)
    < 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
    < 220-You are user number 1 of 5 allowed.
    < 220-Local time is now 09:34. Server port: 21.
    < 220-This is a private system - No anonymous login
    < 220 You will be disconnected after 15 minutes of inactivity.
    > USER foo
    < 331 User foo OK. Password required
    > PASS bar
    < 230 OK. Current directory is /
    > PWD
    < 257 "/" is your current location
    * Entry path is '/'
    > CWD x
    * ftp_perform ends with SECONDARY: 0
    < 250 OK. Current directory is /x
    > CWD  z
    < 550 Can't change directory to  z: No such file or directory
    > MKD  z
    < 257 "_z" : The directory was successfully created
    > CWD  z
    < 550 Can't change directory to  z: No such file or directory
    * Server denied you to change to the given directory
    * Uploaded unaligned file size (0 out of 18 bytes)
    * Connection #0 to host 127.0.0.1 left intact
    

    참고


  • curl
  • Pure-FTPd - About
  • 좋은 웹페이지 즐겨찾기