![一種阻止lftp在傳輸檔案時發出「CWD /」的方法](https://rvso.com/image/1601169/%E4%B8%80%E7%A8%AE%E9%98%BB%E6%AD%A2lftp%E5%9C%A8%E5%82%B3%E8%BC%B8%E6%AA%94%E6%A1%88%E6%99%82%E7%99%BC%E5%87%BA%E3%80%8CCWD%20%2F%E3%80%8D%E7%9A%84%E6%96%B9%E6%B3%95.png)
給出lftp
類似以下內容的命令:
lftp -vv -d -c set ssl:ca-file /path/to/cert/ftps_cron-bundle.crt; set ssl:check-hostname no; set ftp:ssl-protect-data true; set sftp:connect-program "ssh -a -x -o PubkeyAuthentication=no"; set net:max-retries 2; open -e 'put /path/to/data/upload.txt;' -u username:password ftps://server.example.net/
此命令範本適用於各種伺服器,但是在一台伺服器上,即使上傳成功,也會顯示錯誤訊息:
---- CWD path to be sent is `/'
<--- 200 Command OPTS succeed
---> CWD /
<--- 550 Permission denied
cd: Access failed: 550 Permission denied (/)
如何防止lftp
發送CWD /
到該伺服器?
<--- 230 User logged in
---> FEAT
<--- 211-Extensions supported
<--- SIZE
<--- XMD5
<--- XSHA1
<--- XSHA256
<--- XSHA512
<--- XQUOTA
<--- LANG EN, ES, FR, GE
<--- MDTM
<--- MLST size*;type*;perm*;create*;modify*;
<--- REST STREAM
<--- TVFS
<--- UTF8
<--- AUTH SSL;TLS-P;
<--- PBSZ
<--- PROT C;P;
<--- 211 end
---> PWD
<--- 257 "/username/folder" is current directory
---> PBSZ 0
<--- 200 PBSZ=0
---> PROT P
<--- 200 PRIVATE data channel protection level set
---> LANG
<--- 200 Default languages set to EN
---> OPTS UTF8 ON
<--- 200 Command OPTS succeed
---> OPTS MLST size;type;perm;modify;
---- CWD path to be sent is `/'
請注意,伺服器會根據使用者名稱自動設定其預設上傳目錄...即/username/folder
上傳應轉到此預設上傳目錄,而不會產生錯誤訊息。它確實已上傳,但日誌顯示錯誤訊息:
cd: Access failed: 550 Permission denied (/)
---> TYPE I
<--- 200 Transfer mode set to BINARY
---> PASV
<--- 227 Entering Passive Mode (10,10,35,21,195,225).
---- Address returned by PASV seemed to be incorrect and has been fixed
---- Connecting data socket to (nnn.nnn.nnn.nnn) port 50145
---- Data connection established
---> ALLO 148891
<--- 200 Command ALLO succeed
---> STOR upload.txt
<--- 150 Uploading in BINARY file upload.txt
Certificate: ...
Issued by: ...
Trusted
WARNING: Certificate verification: hostname checking disabled
---- Closing data socket
<--- 226 Transfer completed
---> SITE UTIME 20190819100016 upload.txt
<--- 550 Command SITE failed
---> QUIT
---- Closing control socket
已經嘗試了很多事情。例如,透過 put 命令使用各種路徑。
put -O . /path/to/data/upload.txt
put -O /username/folder /path/to/data/upload.txt
cd /username/folder
也嘗試了明確地發出命令。
刪除-vv
也-d
無效。
如何lftp
避免自動發出CWD /
導致不必要且令人困惑的錯誤訊息,而這些錯誤訊息實際上並不意味著任何失敗?
$ lftp --version
LFTP | Version 4.4.8 | Copyright (c) 1996-2013 Alexander V. Lukyanov
...
Libraries used: Readline 6.2
答案1
在 URL 末端附加波形符號 (~):
ftps://server.example.net/~
或者,只需刪除尾部斜線:
ftps://server.example.net