[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
(本頁面已被瀏覽過 3,141 次)