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 等等指令 傳檔了。

在客戶端 (電腦上) 如果要用圖形介面, 可以在 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/.ssh 目錄), 從此以後從桌機用 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 勝 :-)

    回覆刪除