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

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

1
задан 9 July 2014 в 09:49

1 ответ

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

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

Настройка сервера OpenSSH при установке узла Unison на клиенте и сценарии создания узла 1, чтобы cron мог использовать ключ RSA <username>. Добавьте две строки в <username> crontab и Set Script 1 для запуска при запуске.

Настройка сервера OpenSSH на хосте

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

Установите Unison on Client и Host

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

sudo apt-get install unison unison-gtk

Создать один скрипт

cron не имеет той же ОКРУЖНОСТИ, что и <username>, и, таким образом, не сможет найти клиентский RSA ключ, необходимый для подключения к хосту. Скрипт 1 обеспечивает, чтобы файл crontab <username> был добавлен в <username>.

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

Настройка сервера OpenSSH на хосте

Сценарий 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

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

crontab -e

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

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

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

crontab -l

Установите сценарий 1 для запуска при запуске

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

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

Поздравляем!

Если все пойдет хорошо, вы введете пароль для ключа RSA клиента после входа в систему, и вы не будете необходимо ввести пароль еще раз во время сеанса входа в систему. Каждые 10 минут клиент автоматически согласовывает соединение SSH без пароля с Host и Unison будет синхронизировать /home/<username>/Desktop и //HOST//home/<username>/Desktop. Теперь ваш ноутбук и рабочий стол могут быть объединены в святую синхронизацию.

* Детали:

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

После этой одной записи пароля в сеансе входа в систему «Клиент» и «Клиент», Host "синхронизируются автоматически каждые 10 минут. Это был метод, который я нашел, будет работать с помощью ключа RSA <username> и ОКРУЖЕНИЯ cron. **

CAVEAT! Конечно, если одна или обе машины находятся в автономном режиме, выключения и т. Д., Они не синхронизируются!

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

2
ответ дан 24 May 2018 в 05:52

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

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