2016年8月9日 星期二

primitive ftpd:手機平板跟電腦之間的 (直達不繞遠路) 無線傳檔

你只是想在自己手邊的手機跟電腦之間傳檔案, 但 android 卻一直鼓勵你 (透過 google drive 或 dropbox 或 e-mail 等等) 上雲端繞一大圈? 就算這不涉 NSA 的監聽陰謀, 至少也太脫褲子放屁。 所以長久以來我一直 用 usb 線 + adb 傳檔。 最近發現好物 primitive ftpd 透過 wifi 採 sftp 加密傳輸, 要用時才打開, 像 ssh 一樣認得 public key, 所以從特定電腦連線不必重複打密碼。 超好用, 害我 usb 線都閒得收起來了 :-)

一樣透過 f-droid 市集 下載。 它讓你的手機變成 ftp/sftp 伺服器, 但只開放給同一個分享器連出來的裝置連線, 完全不需要把資料繞路繞到戶外 (更不需要繞到國外) 去。

安裝好之後, 至少要設定 user name 跟 password。 再來從你的 linux 這樣連線: sftp -P 1234 ckhung@123.456.789.876 其中 1234 是預設的 port 號, 強烈建議從選項當中的 「Secure Port」 把它改掉 (讓意欲入侵的惡意人士更麻煩一些); ckhung 則改成你設的 user name。 至於 IP 該打多少, 則是從它的主畫面就可直接讀到。 然後就可以用 get 跟 put 等等指令 傳檔了。

[2022/8/12] 我的三星 Galaxy Tab A7 lite 沒刷機、沒root。 以前用 primitive ftpd 都沒問題; 最近客戶端要上傳檔案時, 一直看到 Permission denied。 回到 primitive ftpd, 在偏好設定裡的 「儲存類型」 底下, 把原本的 「普通的舊檔案系統」 改成 「Android 儲存空間存取架構 (SAF)」, 然後選擇要分享哪一個目錄。 設完後關掉再重開服務, 客戶端就可以上傳了。 至於我的手機刷的是 LineageOS, 「普通的舊檔案系統」 仍舊可以正常使用。

在客戶端 (電腦上) 如果要用圖形介面, 可以在 firefox 裡面安裝 fireftp 擴充套件, 然後在網址列打: sftp://123.456.789.876:1234, 畫面會切成左右兩半, 左側是本機硬碟; 被問過密碼之後, 右側就出現手機的檔案系統。 詳見 中文教學 [但是 android 手機採用的就是標準的 utf8 編碼, 所以不需要把字元編碼 character set 改成正體中文 big5!] 另外, 在 windows 上也可以用 winscp 連到 primitive ftp。

注意! 因為它會阻止手機進入待機模式 (一定要的, 伺服器怎能睡著?) 所以請盡量 「用完就停用」。 這樣比較省電, 也比較安全。

另外, 為了提高安全, 我還做了以下設定:

  1. 禁止 anonymous login
  2. 只啟用 sftp, 不啟用 ftp
  3. 不要 announce server in LAN (我自己知道就好了)
  4. 不要 start on boot

如果你也了解 ssh 信任機制, 平常有在用 ssh-agent 偷懶少打密碼, 那麼你一定會很喜歡它的 public key authentication 功能。 把你常用的其中一個 ~/id_*.pub 拷貝到 /sdcard/.ssh/authorized_key.pub /sdcard/Android/data/org.primftpd/files/.ssh/authorized_key.pub 去 (可能需要先建立目錄), 從此以後從桌機用 sftp 命令列登入手機就不需要再打密碼了。

如果你有在用 afwall+ 防火牆, 記得要在 afwall+ 裡面開放讓 linux kernel 跟 primitive ftpd 使用 LAN。 (光是允許它們使用 wifi 還不夠!)

2 則留言:

  1. 一些手機端的檔案管理程都有提供這功能,
    像我現在用的 [File Explorer](https://github.com/MiCode/FileExplorer) 。
    中國小米製,但開源且有在 F-Droid 上架。

    回覆刪除
  2. 哦, 我一直以為它只能當 ftp client; 現在才知道它也可以當 ftp server: https://seo-michael.co.uk/manage-files-on-android-device-via-pc-using-ftp-on-es-file-explorer/ 是說 sftp 有加密而且 primitive ftpd 還可以用 authorized_key.pub 所以還是 primitive ftpd 勝 :-)

    回覆刪除

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。