[Linux] 使用 CurlFtpFs,將遠端的 FTP/FTPS 伺服器掛載成本地目錄

[Linux] 使用 CurlFtpFs,將遠端的 FTP/FTPS 伺服器掛載成本地目錄

最近公司的一台網芳伺服器改了配置,只能用 FTPS 連進去,

雖然用 FileZilla 可以連,

可是之前寫的一些 script 都是用 SMB mount 的方式在掛載目錄,

要將這些 script 改寫成用 FTP 方式抓檔,不是很方便…

 

上網查了一下,原來也是有將 FTP 當成檔案系統 (file system) 的作法,

其中一種叫做 CurlFtpFS,試用起來還蠻簡單的,

來看一下怎麼設定吧~

 

1. 安裝 curlftpfs 套件

在 CentOS 7 上,可以用 yum 安裝 curlftpfs 套件:

sudo yum -y install curlftpfs

 

2. 將遠端 FTP 目錄掛載成本地目錄

假設我想要用帳號 ${username} 和密碼 ${password},

登入遠端 FTP 伺服器 ${ftp_server},

並將根目錄掛載到本地的 /mnt/Build 目錄的話,

可以使用如下的指令:

sudo mkdir -p /mnt/Build/
sudo curlftpfs -v -o tlsv1 -o allow_other -o "user=${username}:${passwd}" ${ftp_server} /mnt/Build/

 

指令裡有用到一些參數,像 -o 是用來帶 FTP 用的參數,像是:

  • -o tlsv1: 指定連上的是 FTPS 伺服器 (也有可能是要用 -o ssl,要嘗試看看)
  • -o allow_other: 用 sudo 掛載的話,原本只有 root 可以存取。加上這個參數就可以讓一般使用者也能存取。
  • -o user: 指定 FTP 的登入帳號與密碼,用冒號 : 分隔開來。

 

至於 -v 參數則是顯示更多除錯用的訊息,

像是可以看到傳給 FTP 伺服器的指令等等,

幫忙排查 FTP 無法登入的問題~

 

這樣掛載好之後,就可以像一般存取本地端檔案一樣,

執行 ls 列舉檔案、cp 或 cat 等等存取檔案內容囉~

不過有一點要注意的是,用 cp/scp 取過來的檔案屬性,

可能是全空的,這會導致接下來要處理檔案可能會出現問題:

testuser@localhost ~ $ ll abc.tgz
----------  1 testuser  staff  753940960 Aug 29 10:36 abc.tgz

 

若遇到問題,可以用 chmod 將讀取屬性加上去:

chmod a+r abc.tgz

 

這樣就可以了:

testuser@localhost ~ $ ll abc.tgz
-r--r--r--  1 testuser  staff  753940960 Aug 29 10:36 abc.tgz

 

3. 卸載掛載好的目錄

平常應該比較少需要用到這功能,

不過如果想要卸載已經掛載好的目錄的話,

可以執行 fusermount -u <目錄>,例好:

fusermount -u /mnt/Build/

 

這樣目錄就會回復非掛載狀態了~

 

參考資料:Mount remote ftp directory host locally into linux filesystem – LinuxConfig.org

(本頁面已被瀏覽過 69 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料