Unison File Sync
Suppose you want to sync files between two LAN computers over SSH. One computer, ‘primary’, may be a mobile/primary device. The other computer, ‘secondary’, may be a server/desktop that will run the ssh daemon. Below, I describe how to allow the ‘primary’ access to the ‘secondary’ and then sync files. This setup is the minimal routing to make things work, but we could also run ssh daemons on both if two way operation was needed.
On both computers, run
sudo apt install unison unison-gtk
On the secondary computer
# Install the SSH daemon to listen for logins sudo apt install openssh-server # let ssh traffic in sudo ufw allow ssh
On both computers, run
# primary or secondary ssh-keygen -t rsa -b 4096 -f .ssh/unison-primary
The public key of the primary computer should be copied to the file
~/.ssh/authorized_keys on the secondary computer.
Append the following to the
/etc/sshd_config file on the secondary computer:
AuthorizedKeysFile .ssh/authorized_keys # Disable all auth by default PasswordAuthentication no PermitEmptyPasswords no PubkeyAuthentication no PermitRootLogin no # Allow auth from local network Match Address 192.168.88.* PubkeyAuthentication yes # if you want, you can even restrict to a specified user AllowUsers primary_name@primary_ip
Test the ssh connection from the primary computer using:
ssh -i .ssh/unison-primary secondary_name@secondary_ip
Test if unison will connect to secondary computer by running the following from the primary computer:
ssh -i .ssh/unison-primary secondary_name@secondary_ip unison -version
Add the following to
~/.unison/default.prf on the primary computer:
# primary and secondary paths to sync root = /home/primary_name/path root = ssh://secondary_name@secondary_ip//home/secondary_name/path # Can ignore files (Name) or paths (Path) ignore = Name *.Rhistory ignore = Name */.Rproj.user ignore = Name */.git # force will do a one way (overwriting) push from primary to secondary. # Comment out if you want two way sync. force = /home/primary_name/data # SSH settings sshargs = -i /home/primary_name/.ssh/unison-primary # Ignore file permissions perms = 0 dontchmod = true
Experiment on a test directory. If you created
default.prf, simply running
unison from the command line on the primary computer should start the file sync. Alternatively, you can use the gui we installed earlier.
Unfortunately, syncing git repositories is not supported https://stackoverflow.com/a/31629250. So make sure to ignore this directory in
Official documentation is located at https://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html.