Unison - Автоматическая синхронизация компьютеров

Существует ли способ автоматической синхронизации двух компьютеров (например, отдельных каталогов в домашней папке) с помощью Unison? Если нет, есть ли альтернатива, которая может это сделать? Я не полностью против того, чтобы постоянно открывать Unison и выполнять синхронизацию вручную, но когда он открывается, вы должны выбрать профиль, который соответствует только одному каталогу, поэтому вы должны синхронизировать каждый по отдельности. Добавьте к этому, IP-адрес является динамическим, и поэтому должен быть отредактирован. Это довольно утомительно, и, кажется, должен быть более простой способ. Я что-то пропустил? Есть ли способ упростить этот процесс (возможно, bash-скрипт)?

6
задан 9 July 2014 в 08:49

2 ответа

Мое предложение состояло бы в том, чтобы решить проблему динамического IP (большинство маршрутизаторов имеет понятие резервирования адреса, которое можно использовать для "зафиксированного" IP компьютера). После этого можно использовать версию командной строки унисона:

unison -auto -batch profilename 

и можно добавить его к сценариям входа в систему/выхода из системы или как задание крона.

Если все еще необходимо изменить IP, можно использовать sed в сценарии:

  1. создайте шаблонный файл в ~/.unison, newprof.tmpl, как это:

    root = /home/romano/
    root = ssh://romano@MYIPHERE//home/romano/
    
    path = education
    path = research
    
  2. создайте следующий сценарий, назовите его sync_newprof:

    #!/bin/bash
    # 
    cd $HOME/.unison
    cat newprof.tmpl | sed s/MYIPHERE/$1 >! newprof.prf
    unison -auto -batch profilename
    

    в основном мы создаем файл профиля, изменяющий слово MYIPHERE со сценарием первый аргумент

  3. теперь можно назвать его как

    sync_newprof 1.1.1.1 
    

    и это создаст профиль с данным IP и синхронизацией.

5
ответ дан 9 July 2014 в 08:49

В локальной сети у Вас есть две машины, на которых Вы хотите надежно и автоматически синхронизироваться /home/<username>/Desktop каждые 10 минут: "Хост", который выполняет Ваш Сервер OpenSSH и "Клиент", который соединяется по SSH для "Размещения".

Обзор решения*

  • Установите сервер OpenSSH на хосте
  • Унисон установки на клиенте и хосте
  • Создайте Сценарий 1 так, чтобы cron может использовать <username>ключ RSA
  • Добавьте две строки к <username>crontab, и
  • Сценарий 1 набора для работы запуска.

Установите сервер OpenSSH на хосте

Посмотрите Установку Сервер SFTP для установки сервера OpenSSH, который прислушивается к соединениям SSH как <username> на Хосте, использует Статический IP, слушает на нестандартном порте, отказывается от основанных на пароле соединений и позволяет ключевые соединения RSA, если Хост обладает RSA public_key.

Унисон установки на клиенте и хосте

На обеих машинах, выполненных (унисоном-gtk является GUI, если Вы хотите его):

sudo apt-get install unison unison-gtk

Создайте один сценарий

cron не совместно использует ту же СРЕДУ как <username> и таким образом не найдет Клиент, который ключ RSA должен был подключить к Хосту. Сценарий 1 предоставляет ту СРЕДУ <username>файл crontab.

Сценарий 1 также генерирует Сценарий 2, который выполняется <username>файл crontab каждые 10 минут и Унисон выполнений.

  • ПРОТЕСТ! Я не эксперт по сценариям и адаптировал этот [1]

Сценарий 1 (/home/<username>/Documents/Scripts/set_ssh_env_for_cron_unison.sh)

#!/bin/sh
SSH_ENV=$HOME/.ssh/environment_for_cron    ## file to be generated
SSH_ENV2=$HOME/Documents/Scripts/unison_sync.sh    ## Script 2 to be generated
function start_agent {
   echo "Initialising new SSH agent..." 
   env | grep SSH | sed 's/SSH_AUTH_SOCK=//' > ${SSH_ENV}   ## send output of env | grep SSH minus "SSH_AUTH_SOCK=" so cron can get output from SSH_ENV
     ## create a new script with three lines, line 3 is unison command
   echo "#!/bin/sh" > ${SSH_ENV2}   ## line 1
   env | grep SSH >> ${SSH_ENV2}    ## line 2
   echo "/usr/bin/unison /home/<username>/Desktop ssh://<Host's local IP address>:<Host's listening SSH Port>//home/<username>/Desktop -batch -debug update+ -ignore 'Name *.gvfs' -ignore 'Name .cache*' -ignore 'Name [Cc]ache*' -ignore 'Name .thumbnails*' -ignore 'Name [Tt]rash*' -ignore 'Name *.backup*' -ignore 'Name *~' -ignore 'Name .dropbox*' -ignore 'Name /proc/*' -ignore 'Name /sys/*' -ignore 'Name /dev/*' -ignore 'Name /run/*' -ignore 'Name /root/Ubuntu One/*'" >> ${SSH_ENV2}  ## line 3
   echo succeeded
   chmod 644 ${SSH_ENV} ## change permissions so cron can read SSH_ENV
   chmod 775 ${SSH_ENV2}    ## change permissions so cron can execute SSH_ENV2
   . ${SSH_ENV} > /dev/null
   ssh-add id_rsa       ## unlocks your RSA key and loads it into the ssh-agent which holds keys in memory throughout login session
}
if [ -f "${SSH_ENV}" ]; then
   . ${SSH_ENV} > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
     start_agent;
   }
else
   start_agent;
fi

Править <username>crontab для выполнения синхронизации каждые 10 минут

crontab -e

Теперь добавьте следующие строки к <username>crontab

SSH_AUTH_SOCK=/home/<username>/.ssh/environment_for_cron
*/10 * * * * /home/<username>/Documents/Scripts/unison_sync.sh
  • Удостоверьтесь, что существует пустая новая строка после этих двух строк выше в новом crontab!

Выход с Ctrl+x; y для "ДА"; Введите для подтверждения. Проверьте crontab файл:

crontab -l

Сценарий 1 набора для работы Запуска

Использовать Dash > Startup Applications (или Applications > System Tools > Preferences на Gnome) для добавления новой программы запуска. Где это говорит "Команду": войдите:

/home/<username>/Documents/Scripts/set_ssh_env_for_cron_unison.sh

Поздравляю!

Если все подходили, Вы введете пароль к ключу Клиента RSA после Клиентского входа в систему, и Вы не должны будете вводить пароль снова в течение сессии входа в систему. Каждые 10 минут Клиент затем автоматически согласует соединение SSH без пароля с Хостом, и Унисон будет синхронизироваться /home/<username>/Desktop и //HOST//home/<username>/Desktop. К Вашему ноутбуку и рабочему столу можно теперь присоединиться в святом synchromony.

*Детали:

Моя заключительная установка связывается как <username> (нет root) использование нестандартного порта SSH для “Размещения” в статическом IP. Аутентификация по паролю отключена на “Хосте” (требующий предварительно аутентифицируемого ключа RSA), в то время как мои RSA включают “Клиент”, требует пароля для использования (однажды на сессию входа в систему). Таким образом взломщик должен предположить правильный порт, ключ RSA и пароль для создания оболочки как <username> с “Хостом”.

После этого ввода пароля на сессию входа в систему “Клиент” и “Хост” синхронизируют себя автоматически каждые 10 минут. Это было методом, который я нашел, будет работать с помощью <username>ключ RSA и cronСРЕДА. **

ПРОТЕСТ! Конечно, если одна или обе машины будут в режиме офлайн, завершение работы, и т.д., то они не будут синхронизироваться!

** Сообщите нам, существует ли более простой метод с помощью ключа RSA, принадлежащего root на Клиенте, который не требует пароля для использования, в то время как Хост одновременно отказывается от основанных на пароле соединений SSH.

2
ответ дан 9 July 2014 в 08:49

Другие вопросы по тегам:

Похожие вопросы: