用網芳管理手機檔案 Android samba server

用網路芳鄰管理手機檔案 Android samba server

    主要目的是為了備份手機或平板的檔案,因為我喜歡用 FastCopy  來作同步,它可以只複製新增或有修改過的檔案,並保留檔案及目錄的日期。原本是手機裝個 samba server 就可以解決的,但非root手機只能用非標準的port,Windows又只能連標準的 samba 139,445。
這邊用一個迂迴的方式來達成:
Windows <-samba-> Ubuntu <-sftp-> Android
使用萬能的 Linux 來作轉換,
首先是手機裝上 sftp server,我是使用這個

android sftp server
設定好帳號跟目錄後就可以啟動

可以先使用 FileZilla 來測試連線是否正確,就備份的角度來看,FileZilla 已經可以作到,只是我們想要的是讓Windows檔案總管可以使用。
下一步,安裝一個 Ubuntu Server,獨立機器或VM都可以,這邊假設只有一台PC,
使用VirtualBox安裝,想要省記憶體的可以裝 Server 版,預設是沒有桌面的。
http://releases.ubuntu.com/16.04.4/ubuntu-16.04.4-server-i386.iso
啟用兩張網卡,第一張安裝時用NAT安裝完成後用Bridged,第二張網卡用Host-only

VirtualBox nic bridged host-only

Ubuntu 安裝軟體
sudo apt-get update
sudo apt-get install openssh-server samba sshfs

設定 samba server

sudo nano /etc/samba/smb.conf
#################################
[global]
hosts deny = ALL
hosts allow = 127. 192.168.0.0/16
unix extensions = no

[homes]
comment = Home Directories
browseable = no
read only = no
valid users = %S
follow symlinks = yes
wide links = yes
#################################
新增/設定 samba user password
sudo smbpasswd -a alex
重啟
sudo /etc/init.d/samba restart

設定網路
sudo nano /etc/network/interfaces
#################################
auto enp0s3
#iface enp0s3 inet dhcp
iface enp0s3 inet static
address 192.168.0.88
netmask 255.255.255.0

auto enp0s3:1
iface enp0s3:1 inet static
address 192.168.1.88
netmask 255.255.255.0

auto enp0s8
iface enp0s8 inet static
address 192.168.56.88
netmask 255.255.255.0
#################################
sudo /etc/init.d/networking restart

網卡如果是後來才新增的,可以先查看網卡名字
dmesg | grep eth
[    2.289998] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 08:00:27:71:36:fc
[    2.290612] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network Connection
[    2.709290] e1000 0000:00:08.0 eth1: (PCI:33MHz:32-bit) 08:00:27:92:d3:27
[    2.709857] e1000 0000:00:08.0 eth1: Intel(R) PRO/1000 Network Connection
[    2.711572] e1000 0000:00:03.0 enp0s3: renamed from eth0
[    2.714426] e1000 0000:00:08.0 enp0s8: renamed from eth1

測試連線
ssh -p46234 alex@192.168.0.4
Unable to negotiate with 192.168.0.4 port 46234: no matching host key type found. Their offer: ssh-dss
如果出現上面這個訊息是因為手機ssh server的加密方法太舊,預設已不再使用,可以修改設定檔後使用
nano ~/.ssh/config
#################################
Host 192.168.0.*
  HostKeyAlgorithms=+ssh-dss
#################################

利用 sshfs 掛載手機目錄
mkdir myphone
sshfs -o allow_other -o idmap=user -o uid=1000 -o gid=1000 -o reconnect -o compression=no -p46234 alex@192.168.0.4:/ myphone/

如果連線正確,目錄下就是手機的檔案
ls myphone/
acct                   factory_init.rc       meta_init.rc
advanced_meta_init.rc  fstab                 mnt
cache                  init                  proc
...

如果要結束連線,可以用這個指令
fusermount -u myphone/


回到 Windows Explorer,在路徑打上
\\192.168.56.8\alex\myphone

Windows samba to android
完成。
可存取的目錄可能隨著手機不一樣,這台是放在  sdcard/ 之下,
這樣管理檔案方便多了。


補充1:
上面那個 sftp 軟體似乎太舊沒有權限存取新手機裡的實體SD卡目錄,所以又試用了另一個,

SSH Server SD Card
User 設定那邊加了兩個目錄,一個是 SD 卡的目錄 001D-5686/,一個是手機內部儲存的目錄 0/,SD 卡目錄的名稱是磁碟的序號,是格式化的時候產生的,理論上每張卡都不一樣。
掛載的方式為,先產生兩個目錄,

mkdir myphone/sdcard/
mkdir myphone/sandisk32/

然後再分別掛載上去。
sshfs -o allow_other -o idmap=user -o uid=1000 -o gid=1000 -o reconnect -o compression=no -p2222 alex@192.168.0.8:/0/ myphone/sdcard/
sshfs -o allow_other -o idmap=user -o uid=1000 -o gid=1000 -o reconnect -o compression=no -p2222 alex@192.168.0.8:/001D-5686/ myphone/sandisk32/